类型:多变量赋值和命名建议

本文详细探讨了Go语言中多变量赋值的计算规则,通过反汇编来验证先计算右边再赋值给左边。同时提到了未使用变量的错误处理,Go语言对此的处理方式可能导致误导。还介绍了动态修改字符串变量的小技巧,并给出了命名建议,强调全局和局部变量的命名差异,以及避免使用保留关键字和内置函数。最后,探讨了变量的本质,指出变量是内存地址的抽象,强调初始化的重要性。
摘要由CSDN通过智能技术生成

多变量赋值

//go:noinline
//go:nosplit
func test() (int, int) {
    a, b := 1, 2
    a, b = b+1, a+2
    return a, b
}
func main() {
    a, b := test()
    println(a, b)
}

多变量赋值涉及计算规则问题,很多语言对于多变量赋值其实是个坑。Go 语言的做法先计算右边的值,然后批量对左边进行赋值。

a, b := 1, 2没有歧义,a, b = b+1, a+2怎么计算呢?第一种解释先计算b+1把这个结果赋值给a那么a = 3,然后计算a+2那么a = 5b = 5。第二种解释是什么?先把b+1a+2计算出来再进行ab的赋值ab都等于3。处理顺序到底是什么?我们需要用反汇编的方式来确认。

反汇编多变量赋值

$ go build -gcflags "-N -l"
$ go tool objdump -s "main\.test" test
 main.go:5 MOVQ $0x0, 0x30(SP) # ret1 = 0 30(SP)
 main.go:5 MOVQ $0x0, 0x38(SP) # ret2 = 0 38(SP)
 main.go:6 MOVQ $0x1, 0x8(SP)  # a = 1 8(SP)
 main.g
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值