在 Go 语言中,赋值表达式 a, b, c = x, y, z 是同时进行的,但是其计算顺序是从左到右依次进行的, 即在 a, b, c 被赋值之前,先计算 x, y, z 的值,并依次将它们赋值给 a, b, c。
例如:a, b, c = a+1, a+1, b+1,其执行原理是先将a+1和b+1的结果保存在临时变量中,最后一次性将它们赋值给a, b, c。
具体的执行过程如下:
- 先计算
a+1,并将结果保存在一个临时变量中; - 接着计算
a+1,并将结果保存在一个新的临时变量中(注意这里不是用上一步的结果,而是重新计算); - 然后计算
b+1,并将结果保存在另一个临时变量中; - 最后一次性将这三个临时变量的值分别赋值给
a, b, c。
注意,由于计算顺序是从左到右依次进行的,因此第二个表达式a+1并没有使用到第一个表达式中计算得出的结果。这也就意味着,在计算表达式 a, b, c = a+1, a+1, b+1时,并不会自动地对重复的变量名a进行复用,而是按照先后顺序依次计算赋值。