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

go lang中如何评估声明和初始化的简写?

go lang中如何评估声明和初始化的简写?

Go
哔哔one 2021-09-27 17:28:18
go中声明和初始化的简写是var a, b, c = 1 , 2, 3 等效于以下声明和初始化方式(根据规范)a:=1  b:=2  c:=3var a int var b int  var c int a=1  b=2  c=3但我没有得到以下代码中发现的问题的答案:package mainimport "fmt"func main() {    var a int = 0    var b int = 1    fmt.Println("init a ",a)    fmt.Println("init b ",b)        a, b = b, a+b    fmt.Println("printing a after `a, b = b, a+b`",a)     fmt.Println("printing b after `a, b = b, a+b`",b) }输出应该是:printing a after 'a, b = b, a+b' 1 printing b after 'a, b = b, a+b' 2 由于 的值b是用a + bie 1+1= 2计算的。但它给出了 1。这是两个工作代码的操场链接,您可以在其中观察差异。a,b = b, a+ba=b, b=a+b我知道我缺少一些需要理解的东西,基本上是如何评估速记表达式,尤其是当表达式中涉及相同的变量时。但是在哪里可以参考适当的文档。有人可以帮忙吗?
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

这里

任务分两个阶段进行。首先,左边的索引表达式和指针间接(包括选择器中的隐式指针间接)的操作数和右边的表达式都按通常的顺序进行计算。其次,分配按从左到右的顺序进行。

基于 a+b (0+1) 首先评估。然后就赋值了。因此你得到 a = 1 和 b = 1 的结果


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

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