定了:Go 1.22將修復for循環(huán)變量錯誤
出品 | OSC開源社區(qū)(ID:oschina2013)
根據 Go 開發(fā)團隊技術 leader Russ Cox (rsc) 的介紹,Go 開發(fā)者經常會犯的錯誤是在循環(huán)迭代結束后,保留對循環(huán)變量的引用,此時它會采用預期之外的新值。 例如下面的程序:
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
}
}
其創(chuàng)建的三個 goroutine 都用于打印相同的變量 v ,因此它們只會打印出 “c”, “c”, “c”,而不是按順序打印 “a”, “b”, 和 “c”。
從 Go1.21 開始,開發(fā)者可以啟用 GOEXPERIMENT=loopvar 來構建 Go 程序,以解決上文提到的 for 循環(huán)變量問題。
構建命令:
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=.
...
現(xiàn)在 Go 開發(fā)團隊表示,從 Go1.22 開始,新的 for 循環(huán)語義將會在 go.mod 文件中的 Go 版本大于等于 Go1.22 下默認啟用。 < END > 我們創(chuàng)建了一個高質量的技術交流群,與優(yōu)秀的人在一起,自己也會優(yōu)秀起來,趕緊 點擊加群 ,享受一起成長的快樂。另外,如果你最近想跳槽的話,年前我花了2周時間收集了一波大廠面經,節(jié)后準備跳槽的可以 點擊這里領取 !
推薦閱讀
··································你好,我是 JavaPub,多年開發(fā)老司機,區(qū)塊鏈從業(yè)者、自媒體創(chuàng)作者、站長。喜歡自由、開放。選擇計算機這個行業(yè),就是因為熱愛。一路過來,給我最深的感受就是一定要不斷學習并關注前沿。只要你能堅持下來,多思考、少抱怨、勤動手,就很容易實現(xiàn)彎道超車!所以,不要問我現(xiàn)在干什么是否來得及。如果你看好一個事情,一定是堅持了才能看到希望,而不是看到希望才去堅持。相信我,只要堅持下來,你一定比現(xiàn)在更好!如果你還沒什么方向,可以先關注我,這里會經常分享一些前沿資訊,幫你積累彎道超車的資本。
評論
圖片
表情
