Go 1.22中for循环语义变得不同了
原文中文,约3600字,阅读约需9分钟。发表于: 。Go 1.22修改了for循环的语义!具体来说,只有在循环中声明了循环变量的 for 循环的语义发生了变化。例如,在下面这段代码中,前两个循环的语义没有变化,但后两个循环的语义发生了变化(从 Go 1.21 到 1.22)。Go 1.21:for k, v = range aContainer {...} for a, b, c = f(); condition; statement...
Go 1.22中for循环语义发生了变化,循环变量声明由'='变为':='。这对for k, v := range ... {...}循环有积极影响,但对for;;循环有消极影响。新的语义可能需要额外的调试时间和认知精力,并可能引入性能下降和数据竞争问题。这种变化降低了向后兼容性的门槛。