第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

高浪為什么不能將值傳遞到主線程上的通道

高浪為什么不能將值傳遞到主線程上的通道

Go
偶然的你 2022-09-26 15:21:00
案例1package mainfunc main()  {    dogChan := make(chan int)    dogChan <- 1}fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan send]:main.main()    /Users/xuzhongwei/Source/awesomeProject/main.go:5 +0x50案例2package mainfunc main()  {    dogChan := make(chan int)    go func(ch chan int) {            }(dogChan)    dogChan <- 1}fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan send]:main.main()    /Users/xuzhongwei/Source/awesomeProject/main.go:9 +0x72案例3package mainfunc main()  {    dogChan := make(chan int)    go func(ch chan int) {        <- ch    }(dogChan)    dogChan <- 1}案例4package mainfunc main()  {    dogChan := make(chan int)        go func(ch chan int) {        <- ch    }(dogChan)    dogChan <- 1    dogChan <- 2}fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan send]:main.main()    /Users/xuzhongwei/Source/awesomeProject/main.go:10 +0x90案例5package mainfunc main()  {    dogChan := make(chan int)    go func(ch chan int) {        for {            select {                case <- ch:            }        }    }(dogChan)    dogChan <- 1    dogChan <- 2    dogChan <- 3    dogChan <- 4    dogChan <- 5}誰能告訴我為什么案例1,案例2有錯誤,而案例3是好的?在案例1中,我的猜測是dogChan不用于戈魯丁,所以它被處理成關閉。在案例2中,我的猜測是,雖然dogChan在戈魯丁中傳遞,但它沒有用于戈魯丁,所以它被處理為封閉誰能告訴我為什么案例4有錯誤,而案例5是好的?
查看完整描述

2 回答

?
PIPIONE

TA貢獻1829條經(jīng)驗 獲得超9個贊

你認為為什么會發(fā)生這種情況?通道應充當發(fā)送方和接收方之間的同步原語。您有一個發(fā)件人在頻道上發(fā)送,但沒有一個在頻道上接收。如果沒有接收戈魯丁或對戈魯丁的接收操作,發(fā)送方只需阻止(作為無緩沖通道)case1case2dogChan

在 上出現(xiàn)同樣的問題,您在信道上有兩個發(fā)送,但在戈魯廷上有一個接收。將永遠阻止。在 中,如果您打算從通道中讀取,只需使用循環(huán)來迭代通過通道發(fā)送的連續(xù)值。case4dogChan <- 2case5range


查看完整回答
反對 回復 2022-09-26
?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

Golang 希望程序讀取放入頻道的消息。

使用者(讀取器)需要從通道中抽?。ㄗx?。┧邢ⅲ瑹o論是使用簡單的供讀還是供選擇。通道發(fā)送和接收都阻塞,直到發(fā)送方和接收方準備就緒。

  • 案例 1, 案例 2 = 向通道發(fā)送一條消息,阻止等待讀取器,讀取零條消息

  • case4 = 向通道發(fā)送一條消息,阻止等待讀取器,讀取器不消耗(讀?。┫?/p>

  • case3 = 將一條消息發(fā)送到通道,從通道消耗一條消息,發(fā)送方阻止等待讀取器

  • case5 = 向通道發(fā)送五條消息,消耗所有 (五) 條消息,每個發(fā)送塊直到讀取器接收

  // for range over channel

    for msg := range ch {

        // process msg

    }

    

    // for select

    done := false

    for !done {

        select {

            case msg := <-ch: {

                // process msg

            }

            case ch == nil: {

                done = true

            }

        }

    }

    

    // producer should close channel

    close(ch)

注意:

  • 通道可以緩沖,指定通道(隊列)大小

  • 通道大小默認值 = 1(無緩沖),通道滿時寫入器塊



查看完整回答
反對 回復 2022-09-26
  • 2 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號