Go 1.22 可能将改变 for 循环变量的语义

几乎世界上每个 Golang 程序员都踩过一遍 for 循环变量的坑,而这个坑的解决方案已经作为实验特性加入到了 Go 1.21 中,并且有望在 Go 1.22 中完全开放。 举个例子,有这么段代码: 12345678var ids []*intfor i := 0; i < 10; i++ { ids = append(ids, &i)}for _, item := range ids...

Go语言1.21版本中加入了解决for循环变量问题的实验特性,预计在1.22版本中完全开放。目前的设计中,for循环中的变量定义是per loop而非per iteration,导致闭包和指针引用的变量都是同一个。解决方法是定义一个新的局部变量。这个问题在C++中也存在。该改变对现有程序有影响,可能会导致代码问题和性能影响。类似的改变在C#中也发生过。

Go 1.22 可能将改变 for 循环变量的语义
原文中文,约2300字,阅读约需6分钟。发表于:
阅读原文