语言规范对我来说太难解析这个简单的问题,所以在这里问。我写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 := ….————是什么赋予了?我应该怎么办?
2 回答
互换的青春
TA贡献1797条经验 获得超6个赞
func take_arg(x *int64){...} => 是 中的值x *int64指针。x int64heap
Package: strconv
func ParseInt(s string, base int, bitSize int) (i int64, err error)
和的返回副本(新的不可变实例)int64并且error您不能将返回分配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
}
}
慕容森
TA贡献1853条经验 获得超18个赞
解决此类问题的另一种方法是消除使用:=
. 只需添加var problem error
为函数的第一行,然后你就可以做到
*x,problem = strconv.ParseInt( os.Args[1], 10,64 )
:=
根本不总是有意义的。
- 2 回答
- 0 关注
- 107 浏览
添加回答
举报
0/150
提交
取消