Go - 多变量赋值的错误

时间:2015-07-17 14:22:11

标签: go

我学习go语言。这是一个非常基本的问题。请查看以下示例代码,并查看第3行。

a := [3]int{10,20} 
var i int = 50
i, a[2] = 100, i

fmt.Println(i)   //100
fmt.Println(a)   //[10 20 50]

我在100变量中覆盖了值i并立即应用了int数组。当我打印数组时,没有打印新值。多变量赋值如何工作?为什么i值不会立即更新到数组中?

2 个答案:

答案 0 :(得分:4)

Go规范的assigment section提及:

  

转让分两个阶段进行。

     

这意味着:

var i int = 50
i, a[2] = 100, i
  • a[2]在分配前i评估了50
  • i被分配了100

答案 1 :(得分:3)

这是在Go language specs

中的目的和描述

基本上,它是一个恰好将2个值分配给2个变量的语句。当语句完全执行时,语句的效果可用/可见,就像任何其他表达式一样。

i的值会在您“点击”第4行时发生变化,因此在分配到a[3]时,其值仍为50