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

通過示例深度理解Go channel range

 更新時間:2023年05月25日 09:26:20   作者:goper  
這篇文章主要為大家介紹了Go channel range使用示例深度理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

我們來看下兩端代碼:

代碼段1

func main() {
    channels := make([]chan int, 10) 
    for i := 0; i < 10; i++ {
         go func(ch chan int) {
          time.Sleep(time.Second)
          ch <- 1 
         }(channels[i])
    }
    for ch := range channels { 
    fmt.Println("Routine ", ch, " quit!")
    }
    fmt.Println("結束")
}

猜想下這上面會打印什么結果。

代碼段2

func main() {
    ch := make(chan int, 10)
    for i := 0; i < 10; i++ {
        go func() {
            ch <- i
        }()
    }
    for range ch {
        <-ch
    }
    fmt.Println(1111)
}

猜想下代碼2會打印什么結果。

自己可以運行下,

代碼段1會正常運行, 代碼段2會死鎖, 納尼,不一樣吧,的確就是不一樣。

請注意:代碼段1 channels 是一個切片類型哦。

總結一下

channel 支持 for range 的方式進行遍歷,需要注意兩個細節(jié)。

1.在遍歷時,如果 channel 沒有關閉,則回出現(xiàn) deadlock 的錯誤。

2.在遍歷時,如果 channel 已經(jīng)關閉,則會正常遍歷數(shù)據(jù),遍歷完后,就會退出遍歷。

3.對于nil channel,無論收發(fā)都會被阻塞。

4.寫完 chan 之后一定要關閉close chan,否則主協(xié)程讀的時候,會發(fā)生被阻塞。

5.已關閉的Channel(有緩沖的),如果繼續(xù)讀數(shù)據(jù),得到的是零值(對于int,就是0), 如果沒有關閉,讀不到數(shù)據(jù)了。

  • select語句中除default外,每個case操作一個channel,要么讀要么寫。
  • select語句中除default外,各case執(zhí)行順序是隨機的。
  • select語句中如果沒有default語句, 則會阻塞等待任一case。
  • select語句中讀操作要判斷是否成功讀取,關閉的channel也可以讀取.

遍歷 chan 與 遍歷切片類型是不一樣的。

以上就是Go channel range使用示例深度理解的詳細內容,更多關于Go channel range的資料請關注腳本之家其它相關文章!

相關文章

  • Go?web中cookie值安全securecookie庫使用原理

    Go?web中cookie值安全securecookie庫使用原理

    這篇文章主要為大家介紹了Go?web中cookie值安全securecookie庫使用及實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • go?GCM?gin中間件的加密解密文件流處理

    go?GCM?gin中間件的加密解密文件流處理

    這篇文章主要介紹了go語言?GCM加密解密,gin中間件的加密解密及文件流處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2022-05-05
  • GO語言gin框架實現(xiàn)管理員認證登陸接口

    GO語言gin框架實現(xiàn)管理員認證登陸接口

    這篇文章主要介紹了GO語言gin框架實現(xiàn)管理員認證登陸接口,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Go語言運算符案例講解

    Go語言運算符案例講解

    這篇文章主要介紹了Go語言運算符案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • Go切片導致rand.Shuffle產生重復數(shù)據(jù)的原因與解決方案

    Go切片導致rand.Shuffle產生重復數(shù)據(jù)的原因與解決方案

    在 Go 語言的實際開發(fā)中,切片(slice)是一種非常靈活的數(shù)據(jù)結構,然而,由于其底層數(shù)據(jù)共享的特性,在某些情況下可能會導致意想不到的 Bug,本文將詳細分析 rand.Shuffle 之后,切片中的數(shù)據(jù)出現(xiàn)重復的問題,探討其根本原因,并給出最佳解決方案,需要的朋友可以參考下
    2025-02-02
  • 一起來用GoLand開發(fā)第一個Go程序

    一起來用GoLand開發(fā)第一個Go程序

    當您在編輯器中工作時GoLand 會分析您的代碼,尋找優(yōu)化方法,并檢測潛在和實際問題,下面這篇文章主要給大家介紹了關于用GoLand開發(fā)第一個Go程序的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Go語言利用泛型封裝常見的Map操作

    Go語言利用泛型封裝常見的Map操作

    Go?語言在?1.18?版本中引入了泛型,這是?Go?語言發(fā)展的一個重要里程碑,它極大地增強了語言的表達能力和靈活性,本文將通過泛型實現(xiàn)封裝常見的Map操作,感興趣的可以了解下
    2025-02-02
  • Go語言實現(xiàn)一個簡單生產者消費者模型

    Go語言實現(xiàn)一個簡單生產者消費者模型

    本文主要介紹了Go語言實現(xiàn)一個簡單生產者消費者模型,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go channel實現(xiàn)原理分析

    Go channel實現(xiàn)原理分析

    Channel是go語言內置的一個非常重要的特性,也是go并發(fā)編程的兩大基石之一,下面這篇文章主要給大家介紹了關于Go中channel的相關資料,需要的朋友可以參考下
    2023-04-04
  • golang 對私有函數(shù)進行單元測試的實例

    golang 對私有函數(shù)進行單元測試的實例

    這篇文章主要介紹了golang 對私有函數(shù)進行單元測試的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論