为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕侠2389804 2022-06-01 11:24:53
语言规范对我来说太难解析这个简单的问题,所以在这里问。我写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

    }

}


查看完整回答
反对 回复 2022-06-01
?
慕容森

TA贡献1853条经验 获得超18个赞

解决此类问题的另一种方法是消除使用:=. 只需添加var problem error为函数的第一行,然后你就可以做到

*x,problem = strconv.ParseInt( os.Args[1],  10,64 )

:=根本不总是有意义的。


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信