考慮兩個(gè)例子:第一:package mainimport "fmt"func main() { c := make(chan int) go func(){ c <- 1 }() go func(){ c <- 2 }() select { case <-c: fmt.Println("<-c:", <-c) fmt.Println("<-c:", <-c) }}據(jù)我所知,應(yīng)該發(fā)生的情況是:兩個(gè) goroutine 生成并寫入同一個(gè)通道,其中一個(gè)阻塞并等待主 goroutine 讀取。但我不明白第二個(gè) goroutine 會發(fā)生什么。它是否會阻塞,因?yàn)橥ǖ朗菬o緩沖的,并且它在設(shè)計(jì)上不能容納兩個(gè)值。有了這篇文章,我陷入了僵局。我在這里發(fā)現(xiàn)了類似的問題。如果是這樣,那么這段代碼是如何運(yùn)行的呢?package mainimport "fmt"func main() { c := make(chan int) go func(){ c <- 1 }() go func(){ c <- 2 }() select { case forget := <-c: fmt.Println("forget:", forget) fmt.Println("<-c:", <-c) }}
1 回答

弒天下
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
好吧,看起來像使用case <-c
實(shí)際從通道讀取的內(nèi)容,而不是簡單地檢查它是否具有我想象的值。
- 1 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)
0/150
提交
取消