您现在的位置是:首页 > 文章详情

Go 1.22 将修复 for 循环变量错误

日期:2023-09-21点击:91

上月正式发布的 Go 1.21 修改了 for 循环变量的语义(预览阶段,点此查看详情)。

现在,Go 团队表示 Go 1.22 会将这项特性发布为正式功能

根据 Go 开发团队技术 leader Russ Cox (rsc) 的介绍,Go 开发者经常会犯的错误是在循环迭代结束后,保留​​对循环变量的引用,此时它会采用预期之外的新值。

例如下面的程序:

 func main() { done := make(chan bool) values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } // wait for all goroutines to complete before exiting for _ = range values { <-done } }

其创建的三个 goroutine 都用于打印相同的变量v,因此它们只会打印出 “c”, “c”, “c”,而不是按顺序打印 “a”, “b”, 和 “c”。

从 Go1.21 开始,开发者可以启用GOEXPERIMENT=loopvar来构建 Go 程序,以解决上文提到的 for 循环变量问题。

构建命令:

 GOEXPERIMENT=loopvar go install my/program GOEXPERIMENT=loopvar go build my/program GOEXPERIMENT=loopvar go test my/program GOEXPERIMENT=loopvar go test my/program -bench=. ...

现在 Go 开发团队表示,从 Go1.22 开始,新的 for 循环语义将会在 go.mod 文件中的 Go 版本大于等于 Go1.22 下默认启用。

原文链接:https://www.oschina.net/news/258984/golang-loopvar-preview
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章