最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過示例深度理解Go channel range

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

正文

我們來看下兩端代碼:

代碼段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("結(jié)束")
}

猜想下這上面會打印什么結(jié)果。

代碼段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會打印什么結(jié)果。

自己可以運(yùn)行下,

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

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

總結(jié)一下

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Go 日志封裝實(shí)戰(zhàn)示例詳解

    Go 日志封裝實(shí)戰(zhàn)示例詳解

    這篇文章主要為大家介紹了Go 日志封裝實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • golang監(jiān)聽文件變化的實(shí)例

    golang監(jiān)聽文件變化的實(shí)例

    這篇文章主要介紹了golang監(jiān)聽文件變化的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Golang執(zhí)行g(shù)o get私有庫提示

    Golang執(zhí)行g(shù)o get私有庫提示"410 Gone" 的問題及解決辦法

    這篇文章主要介紹了Golang執(zhí)行g(shù)o get私有庫提示”410 Gone“ 解決辦法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Go中time.RFC3339 時間格式化的實(shí)現(xiàn)

    Go中time.RFC3339 時間格式化的實(shí)現(xiàn)

    這篇文章主要介紹了Go中time.RFC3339 時間格式化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 使用Go語言自定義隊(duì)列結(jié)構(gòu)的示例代碼

    使用Go語言自定義隊(duì)列結(jié)構(gòu)的示例代碼

    這篇文章主要介紹了自定義隊(duì)列結(jié)構(gòu) 的完整內(nèi)容,幫助初學(xué)者通過自定義結(jié)構(gòu)體來實(shí)現(xiàn)隊(duì)列的數(shù)據(jù)結(jié)構(gòu),文中有詳細(xì)的示例代碼供大家參考,需要的朋友可以參考下
    2025-07-07
  • Go語言中sync.Mutex的使用方法

    Go語言中sync.Mutex的使用方法

    本文主要介紹了golang中sync.Mutex的實(shí)現(xiàn)方法,mutex主要有兩個 method:Lock()和Unlock(),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • GO語言中embed簡介

    GO語言中embed簡介

    這篇文章主要介紹了GO語言中embed簡介的相關(guān)資料,需要的朋友可以參考下
    2023-08-08
  • 使用Golang的gomail庫實(shí)現(xiàn)郵件發(fā)送功能

    使用Golang的gomail庫實(shí)現(xiàn)郵件發(fā)送功能

    本篇博客詳細(xì)介紹了如何使用Golang語言中的gomail庫來實(shí)現(xiàn)郵件發(fā)送的功能,首先,需要準(zhǔn)備工作,包括安裝Golang環(huán)境、gomail庫,以及申請126郵箱的SMTP服務(wù)和獲取授權(quán)碼,其次,介紹了在config文件中配置SMTP服務(wù)器信息的步驟
    2024-10-10
  • Go?gRPC教程實(shí)現(xiàn)Simple?RPC

    Go?gRPC教程實(shí)現(xiàn)Simple?RPC

    這篇文章主要為大家介紹了Go?gRPC教程實(shí)現(xiàn)Simple?RPC示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語言操作mysql數(shù)據(jù)庫簡單例子

    Go語言操作mysql數(shù)據(jù)庫簡單例子

    這篇文章主要介紹了Go語言操作mysql數(shù)據(jù)庫簡單例子,本文包含插入數(shù)據(jù)和查詢代碼實(shí)例,需要的朋友可以參考下
    2014-10-10

最新評論

万安县| 开封县| 依兰县| 绵竹市| 无棣县| 夏津县| 平原县| 宁阳县| 苏尼特左旗| 禄丰县| 通江县| 和硕县| 正定县| 彩票| 延安市| 元氏县| 澄城县| 崇礼县| 灵台县| 靖宇县| 格尔木市| 九龙县| 徐闻县| 黑河市| 泊头市| 延川县| 渝北区| 虞城县| 磴口县| 从江县| 泰安市| 高唐县| 喀什市| 宁都县| 南和县| 临高县| 闽清县| 虎林市| 麦盖提县| 麻栗坡县| 宜城市|