本文已参与周末学习计划,点击链接查看详情:juejin.cn/post/696572…
变量赋值
- 最简单的赋值语句是将要被赋值的变量放在=的左边,新值的表达式放在=的右边。
x = 1 - 特定的二元算术运算符和赋值语句的复合操作有一个简洁形式
count[x] *= scale - 数值变量也可以支持 ++ 递增和 -- 递减语句(自增和自减是语句,而不是表达式,因此 x = i++ 之类的表达式是错误的)
v++
元组赋值
元组赋值是另一种形式的赋值语句,它允许同时更新多个变量的值。在赋值之前,赋值语句右边的所有表达式将会先进行求值,然后再统一更新左边对应变量的值。
x, y = y, x
表达式赋值
有些表达式会产生多个值,比如调用一个有多个返回值的函数。当这样一个函数调用出现在元组赋值右边的表达式中时,左边变量的数目必须和右边一致。f, err = os.Open("foo.txt")
例如map查找、类型断言或通道接收出现在赋值语句的右边,它们都可能会产生两个结果,有一个额外的布尔结果表示操作是否成功:
v, ok = m[key] // map lookup
v, ok = x.(T) // type assertion
v, ok = <-ch // channel receive
但是也不一定是产生两个结果,也可能只产生一个结果。对于值产生一个结果的情形,map查找失败时会返回零值,类型断言失败时会发送运行时panic异常,通道接收失败时会返回零值(阻塞不算是失败)。
可赋值性
不管是隐式还是显式地赋值,在赋值语句左边的变量和右边最终的求到的值必须有相同的数据类型。更直白地说,只有右边的值对于左边的变量是可赋值的,赋值语句才是允许的。