在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ 通道channel問題

通道channel問題

圖片描述

為啥綠色區(qū)域還是可以獲取到數(shù)據(jù),紅色區(qū)域就不可以了?

回答
編輯回答
黑與白

b通道接收之前,獲取的數(shù)據(jù)是a<-i傳入的,在b通過(guò)接受后,由于go func里面的for已經(jīng)執(zhí)行過(guò)了,也就是將a通道內(nèi)容循環(huán)全部輸出了,所以在b通過(guò)之后無(wú)法獲取a通道的內(nèi)容(因?yàn)橐呀?jīng)全部在go func里面獲取了)

2017年1月20日 05:30
編輯回答
巷尾

channel關(guān)閉后可以讀取關(guān)閉前寫入的數(shù)據(jù),關(guān)閉后不能寫,寫了就panic

clipboard.png
這里寫了兩個(gè)數(shù)據(jù)到a channel中,所以下面可以讀兩次,第3次不能讀取了,因?yàn)闆]數(shù)據(jù)了

func main() {
    a := make(chan int, 5)
    b := make(chan bool, 1)
    go func() {
        for {
            k, v := <-a
            if v {
                fmt.Println("receive:", k)
            } else {
                fmt.Println("receive all")
                b <- true
                return
            }
        }
    }()
    for i := 1; i < 3; i++ {
        a <- i
    }
    close(a)
    kkkk := <-a
    nnnn := <-a
    msg := <-b
    kkkkk := <-a
    fmt.Println(kkkk, nnnn, msg, kkkkk)
}

輸出

receive all
1 2 true 0

輸出了4個(gè)值,證明kkkkk := <-a讀到了值,看不懂你的評(píng)論

2018年4月24日 16:17
編輯回答
別傷我

最后 執(zhí)行 kkkkk := <-a
其實(shí)完整寫法 應(yīng)該是 kkkkk,ok := <-a

你最后執(zhí)行的 結(jié)果應(yīng)該是 kkkkk = 0 ok = false 吧 雖然打出kkkkk 是0 但是 ok 是false 說(shuō)明 管道已經(jīng)關(guān)閉 kkkkk 數(shù)據(jù)不可信是默認(rèn)的初始值

2017年8月22日 03:55