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

Go语言结构体初始化的成员赋值执行顺序是否有明确保障?

Go结构体初始化执行顺序问题解答

结论

你提供的代码运行后一定会得到obj.a == 1、obj.b == 2的结果,该行为是Go官方明确保障的,不属于未定义行为。

规则说明

Go语言官方规范中明确约定:带键的结构体字面量初始化场景下,所有键值对的表达式求值顺序与源代码中书写的顺序完全一致,按从左到右的顺序依次执行。

你代码中的结构体初始化语句里,a: nextNumber()的书写顺序早于b: nextNumber(),因此执行时会优先调用nextNumber()得到返回值1赋值给字段a,再调用第二次nextNumber()得到返回值2赋值给字段b,最终结果完全确定。

额外补充:该求值顺序和结构体本身的字段定义顺序无关,只和初始化时你书写的键值对先后顺序有关。比如你把结构体定义改成先声明b再声明a,只要初始化时的键顺序还是a在前b在后,最终的结果还是保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:07