赋值

  1. 将要被赋值的变量放在=的左边,新值的表达式放在=的右边。
x = 1                       // 命名变量的赋值
*p = true                   // 通过指针间接赋值
person.name = "bob"         // 结构体字段赋值
count[x] = count[x] * scale // 数组、slice或map的元素赋值

特定的二元算术运算符和赋值语句的复合操作可以重写为:

count[x] *= scale

这样可以省去对变量表达式的重复计算。

数值变量也可以支持++递增和--递减语句

v := 1

v++    // 等价方式 v = v + 1;v 变成 2

v--    // 等价方式 v = v - 1;v 变成 1

1. 多重赋值(元组赋值)

元组赋值是另一种形式的赋值语句,它允许同时更新多个变量的值。在赋值之前,赋值语句右边的所有表达式将会先进行求值,然后再统一更新左边对应变量的值。

x, y = y, x

a[i], a[j] = a[j], a[i]

元组赋值也可以使一系列琐碎赋值更加紧凑(译注: 特别是在for循环的初始化部分),

i, j, k = 2, 3, 5

但如果表达式太复杂的话,应该尽量避免过度使用元组赋值;因为每个变量单独赋值语句的写法可读性会更好。

1.1. 可赋值性

赋值语句是显式的赋值形式,但是程序中还有很多地方会发生隐式的赋值行为:函数调用会隐式地将调用参数的值赋值给函数的参数变量,一个返回语句会隐式地将返回操作的值赋值给结果变量,一个复合类型的字面量(§4.2)也会产生赋值行为。例如下面的语句:

medals := []string{"gold", "silver", "bronze"}

隐式地对slice的每个元素进行赋值操作,类似这样写的行为:

medals[0] = "gold"

medals[1] = "silver"

medals[2] = "bronze"

map和chan的元素,虽然不是普通的变量,但是也有类似的隐式赋值行为。

results matching ""

    No results matching ""