Go 赋值后是否可以进行转换?
我想知道是否有什么技巧可以避免xv标识符/分配。基本上类似于Go 赋值后是否可以进行转换?,go,Go,我想知道是否有什么技巧可以避免xv标识符/分配。基本上类似于x,err:=T1(strconv.Atoi(“1”)) 例如,只有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 }
x,err:=T1(strconv.Atoi(“1”))
例如,只有
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
不,我相信没有这样的把戏 当我想避免在范围中声明不必要的变量时,对于一次性操作,我有时会使用这种匿名函数调用:
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)
}
我不认为有。我想func调用的缺点是,您最终会得到值copy加上func调用。
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)
}