我想知道是否有任何技巧可以避免xv标识符/分配。基本上类似于x, err := T1(strconv.Atoi("1"))
package main
import "fmt"
import "strconv"
type T1 int
func main() {
xv, err := strconv.Atoi("1")
if err != nil {
panic(err)
}
x := T1(xv)
fmt.Println(x)
}
答案 0 :(得分:1)
例如,只有perl -pi.bak -e 's/FT_BAR, (\d+),/"FT_BAR, ".($1+1).","/e;' test_re.txt
转义到堆,
x
输出:
package main
import (
"fmt"
"strconv"
)
type T1 int
func atoi(a string) int {
i, err := strconv.Atoi(a)
if err != nil {
panic(err)
}
return i
}
func main() {
x := T1(atoi("1"))
fmt.Println(x)
}
答案 1 :(得分:0)
不,我相信没有这样的伎俩。
当我想避免在作用域中声明不必要的变量时,对于一次性操作,我有时会使用这种匿名函数调用:
package main
import "fmt"
import "strconv"
type T1 int
func main() {
x, err := func() (T1, error) {
x, err := strconv.Atoi("1")
return T1(x), err
}()
fmt.Println(err, x)
}
另一方面,如果你需要在很多场合执行类似的强制转换,并且不一定总是由于同一个调用(如Atoi
),你可以创建一个简单的函数,转换并传递错误:
package main
import "fmt"
import "strconv"
type T1 int
func resToT1(n int, err error) (T1, error) {
return T1(n), err
}
func main() {
x, err := resToT1(strconv.Atoi("1"))
fmt.Println(err, x)
}