对于这个简单的问题,语言规范对我来说太难解析了,所以在这里问。
我写
func take_arg(x *int64) {
*x,_ = strconv.ParseInt( os.Args[1], 10,64 )
}
哪个有效。
但是,如果我尝试处理该错误
func take_arg(x *int64) {
*x,problem := strconv.ParseInt( os.Args[1], 10,64 )
fix(problem)
}
由于
non-name *x on left side of :=
,我被编译器阻止了。-
编辑:通常可以使用
x,problem := …
。——-
是什么赋予了?我该怎么办?
最佳答案
func take_arg(x *int64){...}
=> x *int64
是x int64
中heap
值的指针。
Package: strconv
func ParseInt(s string, base int, bitSize int) (i int64, err error)
返回
int64
和error
的副本(新的不可变实例),您不能将return value
分配给x
pointer
。您必须使用指针作为指针:func take_arg(x *int64) {
if i, err := strconv.ParseInt(os.Args[1], 10, 64); err != nil {
*x = fix(err) // or other action, for example: *x = 777
} else {
*x = i
}
}
关于pointers - 在golang中使用指针进行多次分配和创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61371459/