我最近想到了这个:
func main() {
x, y := 0, 1
x, y = y, x+y
fmt.Println(y)
}
我的想法是:
x, y = y, x+y
与:
相同x = y
y = x+y
这将导致最终值x = 1, y = 2
然而,我得到的最终值是x = 1, y = 1
为什么?
感谢。
答案 0 :(得分:7)
这是specified:
的方式转让分两个阶段进行。首先,左侧的索引表达式和指针间接操作(包括选择器中的隐式指针间接)的操作数和右侧的表达式都按通常的顺序进行评估。其次,分配按从左到右的顺序进行。
分配首先评估右侧的所有表达式,然后将结果分配给左侧的变量。
你的
x, y = y, x+y
基本上等同于此
tmp1 := y
tmp2 := x+y
x = tmp1
y = tmp2
您甚至可以使用此事实在一行中交换2个变量,如下所示:
a, b = b, a