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

go中声明和初始化的简写是


var a, b, c = 1 , 2, 3 

等效于以下声明和初始化方式(根据规范)


a:=1 

 b:=2 

 c:=3


var a int

 var b int 

 var c int

 a=1 

 b=2 

 c=3


但我没有得到以下代码中发现的问题的答案:


package main


import "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+b

a=b, b=a+b

我知道我缺少一些需要理解的东西,基本上是如何评估速记表达式,尤其是当表达式中涉及相同的变量时。


但是在哪里可以参考适当的文档。有人可以帮忙吗?


哔哔one
浏览 205回答 1
1回答

米脂

看这里任务分两个阶段进行。首先,左边的索引表达式和指针间接(包括选择器中的隐式指针间接)的操作数和右边的表达式都按通常的顺序进行计算。其次,分配按从左到右的顺序进行。基于 a+b (0+1) 首先评估。然后就赋值了。因此你得到 a = 1 和 b = 1 的结果
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go