自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 語言史詩級更新-循環(huán)Bug修復

開發(fā) 前端
Let's Encrypt: CAA Rechecking bug類似的問題連 mozilla 團隊也沒能幸免,所以也確實是一個非常常見的問題,這樣的寫法符合大部分的開發(fā)者的直覺,畢竟其他語言這么使用也沒有問題。

背景

前兩天 Golang 的官方博客更新了一篇文章:Fixing For Loops in Go 1.22

看這個標題的就是修復了 Go 循環(huán)的 bug,這真的是史詩級的更新;我身邊接觸到的大部分 Go 開發(fā)者都犯過這樣的錯誤,包括我自己,所以前兩年我也寫過類似的博客:簡單的 for 循環(huán)也會踩的坑

先來簡單回顧下使用使用 for 循環(huán)會碰到的問題:

list := []*Demo{{"a"}, {"b"}}  
for _, v := range list {  
 go func() {  
  fmt.Println("name="+v.Name)  
 }()  
}  
  
type Demo struct {  
 Name string  
}

預期的結果應該是打印 a,b,但實際打印的卻是b,b。

圖片圖片

Let's Encrypt: CAA Rechecking bug類似的問題連 mozilla 團隊也沒能幸免,所以也確實是一個非常常見的問題,這樣的寫法符合大部分的開發(fā)者的直覺,畢竟其他語言這么使用也沒有問題。

當然在現(xiàn)階段要解決也很簡單,要么就是在使用之前先復制一次,或者使用閉包傳參:

// 復制
 list := []*Demo{{"a"}, {"b"}}  
 for _, v := range list {  
  temp:=v  
  go func() {  
   fmt.Println("name="+temp.Name)  
  }()  
 }

 // 閉包
 list := []*Demo{{"a"}, {"b"}}  
 for _, v := range list {  
  go func(temp *Demo) {  
   fmt.Println("name="+temp.Name)  
  }(v)  
 }

還好官方也意識到了這個問題:

圖片圖片

所以在 1.22 中我們可以不用再寫這個 ????v:=v這個多余的復制語句了,也不會出現(xiàn)上面的問題。

我們在 1.21 中可以使用環(huán)境變量預覽這個特性:

? GOEXPERIMENT=loopvar go test
name=b
name=a

在 1.22 發(fā)布后建議大家都可以升級了,將這種惡心的 bug 扼殺在搖籃里。

1.22 后帶來了一個好消息是今后少了一道面試題,壞消息是又新增了一個 1.22 版本帶來了哪些變化的面試題??

更多詳情可以參看官方播客:https://go.dev/blog/loopvar-preview

責任編輯:武曉燕 來源: crossoverJie
相關推薦

2015-08-14 10:15:30

蘋果更新

2023-11-13 08:21:35

阿里云盤

2022-02-09 08:21:43

累積更新微軟Windows 10

2020-09-09 12:44:59

Windows 10微軟Bug

2022-07-21 14:42:33

Windows 11BUG微軟

2023-07-27 07:24:49

2023-07-27 08:43:53

2021-01-05 14:22:35

比特幣貨幣投資

2023-04-06 08:00:00

JavaValhalla項目

2023-07-14 12:10:08

AI自主權離職

2015-10-22 10:09:03

ios9更新bug

2021-06-24 05:40:28

Windows 10操作系統(tǒng)微軟

2015-07-31 09:42:11

IOS更新

2021-10-18 05:38:53

Windows 11操作系統(tǒng)微軟

2019-10-17 10:12:02

Go語言Java函數(shù)

2022-05-23 09:22:20

Go語言調(diào)試器Delve

2021-07-08 23:53:44

Go語言拷貝

2009-02-20 16:53:07

Windows 7BetaBug

2016-09-14 16:16:01

Windows 10KindleBUG

2022-09-14 08:28:31

微軟Windows 11
點贊
收藏

51CTO技術棧公眾號