欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Go 1.22 for循環(huán)的兩處重要更新

 更新時間:2024年02月10日 08:55:22   作者:陳明勇  
這篇文章主要詳細介紹了Go 1.22 for循環(huán)的兩處重要更新,Go 1.22 版本于 2024 年 2 月 6 日發(fā)布,引入了幾個重要的特性和改進,在語言層面上,這個版本對 for 循環(huán)進行了兩處更新,本文將會對 for 循環(huán)的兩個更新進行介紹,需要的朋友可以參考下

Go 1.22 版本于 202426 日發(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、mapchannel 類型的表達式進行迭代,而自 Go 1.22 版本起,額外新增對 interger 類型的支持,這意味著我們能夠直接使用整數(shù)進行循環(huán)迭代。

package main

import "fmt"

func main() {
	for i := range 10 {
		fmt.Println(i)
	}
}

對于整數(shù)值 10,迭代值從 09 按遞增順序生成。如果 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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Golang中的sync.WaitGroup用法實例

    Golang中的sync.WaitGroup用法實例

    這篇文章主要介紹了Golang中的sync.WaitGroup用法實例,WaitGroup的用途,它能夠一直等到所有的goroutine執(zhí)行完成,并且阻塞主線程的執(zhí)行,直到所有的goroutine執(zhí)行完成,需要的朋友可以參考下
    2015-07-07
  • go語言入門環(huán)境搭建及GoLand安裝教程詳解

    go語言入門環(huán)境搭建及GoLand安裝教程詳解

    這篇文章主要介紹了go語言入門環(huán)境搭建及GoLand安裝教程詳解,需要的朋友可以參考下
    2020-12-12
  • Golang程序如何查找內(nèi)存泄漏(pprof)

    Golang程序如何查找內(nèi)存泄漏(pprof)

    該文章詳細介紹了如何使用Golang的pprof工具查找內(nèi)存泄漏,首先,在main包中引入pprof包并設置條件編譯,然后編譯程序并運行,通過執(zhí)行g(shù)otoolpprof-inuse_space命令,可以進入交互模式并使用top命令查看內(nèi)存分配最多的函數(shù),如果本機中有源代碼
    2024-12-12
  • go語言VScode?see?'go?help?modules'?(exit?status?1)問題的解決過程

    go語言VScode?see?'go?help?modules'?(exit?statu

    最近上手學習go語言,準備在VSCode上寫程序的時候卻發(fā)現(xiàn)出了一點問題,下面這篇文章主要給大家介紹了關于go語言VScode?see?'go?help?modules'(exit?status?1)問題的解決過程,需要的朋友可以參考下
    2022-07-07
  • 淺析Go語言版本的forgery

    淺析Go語言版本的forgery

    使用過Python語言的朋友們可能使用過 forgery_py ,它是一個偽造數(shù)據(jù)的工具。這篇文章主要介紹了Go語言版本的forgery,需要的朋友可以參考下
    2018-08-08
  • Nunu快速構(gòu)建高效可靠Go應用腳手架使用詳解

    Nunu快速構(gòu)建高效可靠Go應用腳手架使用詳解

    這篇文章主要為大家介紹了如何使用Nunu快速構(gòu)建高效可靠Go應用腳手架詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Go語言中的init函數(shù)特點及用法詳解

    Go語言中的init函數(shù)特點及用法詳解

    在Go語言中,init()函數(shù)是一種特殊的函數(shù),用于在程序啟動時自動執(zhí)行一次。它的存在為我們提供了一種機制,可以在程序啟動時進行一些必要的初始化操作,為程序的正常運行做好準備,在這篇文章中,我們將詳細探討init()函數(shù)的特點、用途和注意事項
    2023-06-06
  • 詳解go中的defer鏈如何被遍歷執(zhí)行

    詳解go中的defer鏈如何被遍歷執(zhí)行

    為了在退出函數(shù)前執(zhí)行一些資源清理的操作,例如關閉文件、釋放連接、釋放鎖資源等,會在函數(shù)里寫上多個defer語句,多個_defer 結(jié)構(gòu)體形成一個鏈表,G 結(jié)構(gòu)體中某個字段指向此鏈表,那么go中的defer鏈如何被遍歷執(zhí)行,本文將給大家詳細的介紹,感興趣的朋友可以參考下
    2024-01-01
  • Golang環(huán)境變量設置和查看工具go env詳解

    Golang環(huán)境變量設置和查看工具go env詳解

    go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下
    2023-07-07
  • Go語言Http?Server框架實現(xiàn)一個簡單的httpServer

    Go語言Http?Server框架實現(xiàn)一個簡單的httpServer

    這篇文章主要為大家介紹了Go語言Http?Server框架實現(xiàn)一個簡單的httpServer抽象,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論