在Go中为多个变量赋值

时间:2016-12-24 16:25:03

标签: go

我最近想到了这个:

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

为什么?

感谢。

1 个答案:

答案 0 :(得分:7)

这是specified

的方式
  

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

分配首先评估右侧的所有表达式,然后将结果分配给左侧的变量。

你的

x, y = y, x+y

基本上等同于此

tmp1 := y
tmp2 := x+y
x = tmp1
y = tmp2

您甚至可以使用此事实在一行中交换2个变量,如下所示:

a, b = b, a