You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言多赋值求值机制咨询:左右侧含同一变量时的求值逻辑

Go语言多赋值中左右侧出现相同变量的求值逻辑

嘿,这个问题问得特别到位!我当初刚接触Go的时候,也被这个细节绕了好一会儿,咱们慢慢掰扯清楚~

Go里的多赋值逻辑核心就一句话:先一次性计算右侧所有表达式的结果(用的是赋值开始前变量的原始值),再把这些结果依次赋值给左侧对应的变量。不管左右两侧有没有重复的变量,这个顺序都不会变。

举个最经典的例子——交换变量:

a, b := 1, 2
a, b = b, a
fmt.Println(a, b) // 输出 2 1

这里执行a, b = b, a时,会先把右侧的b(值为2)和a(值为1)都算出来存起来,然后再把2赋值给a,1赋值给b,完美完成交换。如果是先赋值再计算右侧,那结果就完全不对了对吧?

再举个更直观的例子,看看变量重复时的情况:

x := 3
y := 5
x, y = x+1, y+x
fmt.Println(x, y) // 输出 4 8

执行赋值语句时,右侧的x+1用的是原始的x=3,得到4;y+x用的是原始的y=5和x=3,得到8。然后才把4赋值给x,8赋值给y。哪怕左侧有x,也不会影响右侧表达式的计算,因为右侧是先全部算完的。

简单总结下规则:

  • 第一步:按从左到右的顺序,计算右侧所有表达式的值,把这些值暂存起来
  • 第二步:按从左到右的顺序,把暂存的结果依次赋值给左侧的变量
  • 整个过程中,右侧表达式的计算完全不受左侧赋值的影响,用的都是赋值开始前变量的状态

内容的提问来源于stack exchange,提问作者Jeroen Jacobs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:32:53