AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Go 語言史詩級更新-循環Bug修復

來源: 責編: 時間:2023-09-25 10:38:09 280觀看
導讀背景前兩天 Golang 的官方博客更新了一篇文章:Fixing For Loops in Go 1.22看這個標題的就是修復了 Go 循環的 bug,這真的是史詩級的更新;我身邊接觸到的大部分 Go 開發者都犯過這樣的錯誤,包括我自己,所以前兩年我也寫過

背景

前兩天 Golang 的官方博客更新了一篇文章:Fixing For Loops in Go 1.229ea28資訊網——每日最新資訊28at.com

看這個標題的就是修復了 Go 循環的 bug,這真的是史詩級的更新;我身邊接觸到的大部分 Go 開發者都犯過這樣的錯誤,包括我自己,所以前兩年我也寫過類似的博客:簡單的 for 循環也會踩的坑9ea28資訊網——每日最新資訊28at.com

先來簡單回顧下使用使用 for 循環會碰到的問題:9ea28資訊網——每日最新資訊28at.com

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

預期的結果應該是打印 a,b,但實際打印的卻是b,b。9ea28資訊網——每日最新資訊28at.com

圖片圖片9ea28資訊網——每日最新資訊28at.com

Let's Encrypt: CAA Rechecking bug類似的問題連 mozilla 團隊也沒能幸免,所以也確實是一個非常常見的問題,這樣的寫法符合大部分的開發者的直覺,畢竟其他語言這么使用也沒有問題。9ea28資訊網——每日最新資訊28at.com

當然在現階段要解決也很簡單,要么就是在使用之前先復制一次,或者使用閉包傳參:9ea28資訊網——每日最新資訊28at.com

// 復制 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)   }

還好官方也意識到了這個問題:9ea28資訊網——每日最新資訊28at.com

圖片圖片9ea28資訊網——每日最新資訊28at.com

所以在 1.22 中我們可以不用再寫這個 ????v:=v這個多余的復制語句了,也不會出現上面的問題。9ea28資訊網——每日最新資訊28at.com

我們在 1.21 中可以使用環境變量預覽這個特性:9ea28資訊網——每日最新資訊28at.com

? GOEXPERIMENT=loopvar go testname=bname=a

在 1.22 發布后建議大家都可以升級了,將這種惡心的 bug 扼殺在搖籃里。9ea28資訊網——每日最新資訊28at.com

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

本文鏈接:http://www.tebozhan.com/showinfo-26-11246-0.htmlGo 語言史詩級更新-循環Bug修復

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 不可變模式篇:非常抓狂,這特么到底是哪里不對?

下一篇: 高并發下就該使用非阻塞式方式接口調用提高系統整體性能

標簽:
  • 熱門焦點
Top