golang中有一种特色语法叫多值赋值,就是等号左边可接收多个值;如:
//函数调用:
x,y := f()
// range 表达式:
for k,v:=range slice{
// to do
}
// 类型断言
type,ok := i.(xxx)
看似简化了代码,但在某些场景使用起来并不是那么清晰,很容易搞混;
看如下代码:
func main(){
x := []int{1,2,3}
i:=0
i,x[i] = 1,2 // set i=1,x[0] = 2
fmt.Println(i,x) // 打印: 1 [2,2,3]
x = []int{1,2,3}
i = 0
x[i],i = 2,1 // set x[0] = 2, i = 1
fmt.Println(i,x) // 打印: 1 【2,2,3】
x = []int{1,2,3}
i=0
x[i],i = 2,x[i] // set tmp=x[0],x[0]=2, i=tmp , i=1
fmt.Println(i,x) // 打印 1 【2,2,3】
x[0],x[0] = 1,2 // set x[0]=1,then x[0]=2 (so x[0] == 2 at end)
fmt.Println(x[0]) // 打印: 2
// 总结: 多值赋值一定是从 等号左边的最左边的数开始赋值的,从左至右
}// func
总结: 多值赋值一定是从 等号左边的最左边的数开始赋值的,从左至右;
如果发现右侧的表达式计算引用了左侧的变量,则创建临时变量进行值拷贝,最后完成计算。
最后附上编译结果:
