您的位置 首页 golang

Golang 多值赋值要注意的细节和陷阱

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  

总结: 多值赋值一定是从 等号左边的最左边的数开始赋值的,从左至右;

如果发现右侧的表达式计算引用了左侧的变量,则创建临时变量进行值拷贝,最后完成计算。

最后附上编译结果:


文章来源:智云一二三科技

文章标题:Golang 多值赋值要注意的细节和陷阱

文章地址:https://www.zhihuclub.com/88499.shtml

关于作者: 智云科技

热门文章

网站地图