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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么通道沒(méi)有接收到成為結(jié)構(gòu)體的成員

為什么通道沒(méi)有接收到成為結(jié)構(gòu)體的成員

Go
ibeautiful 2023-07-17 16:54:58
代碼: https: //play.golang.org/p/Oh3oTa7GIPXtype a struct {    c chan bool}func (a *a) do() {    a.c <- true}type b struct {    c chan bool    a a}func main() {    b := b{        c: make(chan bool),        a: a{c: make(chan bool)},    }    go b.s()    b.c <- true    // below is to stay main gorutine alive    done := make(chan bool)    go func() {        time.Sleep(10 * time.Second)        done <- true    }()    for {        select {        case <-done:            fmt.Println("Done!")            return        }    }}func (b *b) s() {    for {        select {        case <-b.c:            fmt.Println("b c")            b.a.do()        case <-b.a.c:            fmt.Println("b a c")        }    }}上述實(shí)際輸出是b cDone!預(yù)期輸出:b cb a cDone !我不明白為什么它不打印b a c?代碼是不言自明的,如果還需要更多詳細(xì)信息,請(qǐng)?jiān)儐?wèn)
查看完整描述

1 回答

?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

你的maingoroutine 在 上發(fā)送一個(gè)值b.c,然后等待:


b.c <- true

從 main 啟動(dòng)的 goroutine:


go b.s()

這是從 接收的b.c,也是從 接收的b.a.c:


func (b *b) s() {

    for {

        select {

        case <-b.c:

            fmt.Println("b c")

            b.a.do()


        case <-b.a.c:

            fmt.Println("b a c")

        }

    }

}

如果從 接收到一個(gè)值b.c,則該 goroutine 會(huì)嘗試發(fā)送b.a.c(在a.do()方法中),并且您希望同一個(gè)goroutine 從 接收b.a.c。但由于b.a.c是無(wú)緩沖的,發(fā)送將被阻塞,因此它永遠(yuǎn)不會(huì)到達(dá)b.s()它可以/將從中接收的下一個(gè)迭代b.a.c。


如果一個(gè)通道是無(wú)緩沖的,那么只有當(dāng)有另一個(gè) goroutine 準(zhǔn)備從它接收數(shù)據(jù)時(shí),才可以在該通道上進(jìn)行發(fā)送。


如果您對(duì)b.a.c通道進(jìn)行緩沖,則可以在不阻塞的情況下繼續(xù)發(fā)送,因此在下一次迭代中可以接收它:


a: a{c: make(chan bool, 1)}

通過(guò)此更改,您將獲得預(yù)期的輸出。在Go Playground上嘗試一下。



查看完整回答
反對(duì) 回復(fù) 2023-07-17
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)