我学习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
值不会立即更新到数组中?
答案 0 :(得分:4)
Go规范的assigment section提及:
转让分两个阶段进行。
- 首先,左侧index expressions和pointer indirections的操作数(包括selectors中的隐式指针间接)和右侧的表达式为all evaluated in the usual order。
- 其次,分配按从左到右的顺序进行。
这意味着:
var i int = 50
i, a[2] = 100, i
a[2]
在分配前i
评估了(50
)i
被分配了100
答案 1 :(得分:3)
基本上,它是一个恰好将2个值分配给2个变量的语句。当语句完全执行时,语句的效果可用/可见,就像任何其他表达式一样。
i
的值会在您“点击”第4行时发生变化,因此在分配到a[3]
时,其值仍为50
。