詳解Go 1.22 for循環(huán)的兩處重要更新
Go 1.22
版本于 2024 年 2 月 6 日發(fā)布,引入了幾個重要的特性和改進。在語言層面上,這個版本對 for
循環(huán)進行了兩處更新:
- 循環(huán)的每次迭代都會創(chuàng)建新變量
- 循環(huán)支持對整數(shù)范圍進行迭代
本文將會對 for
循環(huán)的兩個更新進行介紹。
準備好了嗎?準備一杯你最喜歡的咖啡或茶,隨著本文一探究竟吧。
循環(huán)的每次迭代都會創(chuàng)建新變量
在 Go 1.22
版本之前,for
循環(huán)聲明的變量只創(chuàng)建一次,并在每次迭代中更新。在 Go 1.22
中,循環(huán)的每次迭代都會創(chuàng)建新變量,這將會避免意外的共享錯誤發(fā)生。
通過相同的代碼示例在不同 Go
版本中運行,我們可以清楚地看到運行結(jié)果之間的區(qū)別,從而感受到語言更新帶來的具體影響。
Go 1.21
版本的代碼示例
package main import "fmt" func main() { done := make(chan bool) values := []string{"chen", "ming", "yong"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } // 結(jié)束前等待所有的 goroutine 執(zhí)行成 for _ = range values { <-done } }
代碼運行結(jié)果如下所示:
yong
yong
yong
在
for
循環(huán)體里,匿名函數(shù)與循環(huán)變量v
形成了閉包。閉包捕獲了v
的引用(或說地址),這導致所有的閉包實例在訪問v
時實際上都訪問的是同一個內(nèi)存地址。由于v
只創(chuàng)建一次,并且每次迭代都會更新。因此最終的打印結(jié)果都是同一個值yong
。Go 1.22
版本代碼示例
package main import "fmt" func main() { done := make(chan bool) values := []string{"chen", "ming", "yong"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } // 結(jié)束前等待所有的 goroutine 執(zhí)行成 for _ = range values { <-done } }
代碼運行結(jié)果如下所示:
yong
ming
chen
在
Go 1.22
中,循環(huán)的每次迭代都會創(chuàng)建新變量v
,這意味著每個閉包都持有對不同v
變量的引用,因此,最終打印的結(jié)果將各不相同。循環(huán)的每次迭代都會創(chuàng)建新變量 的這一更新,有效避免了以往版本中常見的閉包陷阱,提高了代碼的安全性和可預測性。
循環(huán)支持對整數(shù)范圍進行迭代
在 Go 1.22
版本之前,當我們使用 for range
時,僅支持 array or slice
、string
、map
和 channel
類型的表達式進行迭代,而自 Go 1.22
版本起,額外新增對 interger
類型的支持,這意味著我們能夠直接使用整數(shù)進行循環(huán)迭代。
package main import "fmt" func main() { for i := range 10 { fmt.Println(i) } }
對于整數(shù)值 10
,迭代值從 0
到 9
按遞增順序生成。如果 range
后面的表達式為 0
,則循環(huán)不進行任何迭代。
小結(jié)
本文介紹了 Go 1.22
版本對 for
循環(huán)所做的兩處重要更新:循環(huán)的每次迭代都會創(chuàng)建新變量 和 循環(huán)支持對整數(shù)范圍進行迭代。
循環(huán)的每次迭代都會創(chuàng)建新變量,有效避免了以往版本中常見的閉包陷阱,提高了代碼的安全性和可預測性。
循環(huán)支持對整數(shù)范圍進行迭代,極大地增強了 for
循環(huán)的靈活性,使得編寫計數(shù)循環(huán)更加直接和簡潔。
到此這篇關于詳解Go 1.22 for循環(huán)的兩處重要更新的文章就介紹到這了,更多相關Go 1.22 for循環(huán)更新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
go語言VScode?see?'go?help?modules'?(exit?statu
最近上手學習go語言,準備在VSCode上寫程序的時候卻發(fā)現(xiàn)出了一點問題,下面這篇文章主要給大家介紹了關于go語言VScode?see?'go?help?modules'(exit?status?1)問題的解決過程,需要的朋友可以參考下2022-07-07Golang環(huán)境變量設置和查看工具go env詳解
go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下2023-07-07Go語言Http?Server框架實現(xiàn)一個簡單的httpServer
這篇文章主要為大家介紹了Go語言Http?Server框架實現(xiàn)一個簡單的httpServer抽象,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04