在golang中使用指针进行多重赋值和创建

语言规范对我来说太难解析这个简单的问题,所以在这里问。


我写


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 := ….


————


是什么赋予了?我应该怎么办?


慕侠2389804
浏览 132回答 2
2回答

互换的青春

func take_arg(x *int64){...} => 是 中的值x *int64指针。x int64heapPackage: strconvfunc 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    }}

慕容森

解决此类问题的另一种方法是消除使用:=. 只需添加var problem error为函数的第一行,然后你就可以做到*x,problem = strconv.ParseInt( os.Args[1],  10,64 ):=根本不总是有意义的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go