首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

出品|开源中国

上月正式发布的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 

其创建的三个 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://page.om.qq.com/page/OMCzzsO2fPvJHnU5WNWQ9eCQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券