考慮兩個例子:第一: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) }}據我所知,應該發生的情況是:兩個 goroutine 生成并寫入同一個通道,其中一個阻塞并等待主 goroutine 讀取。但我不明白第二個 goroutine 會發生什么。它是否會阻塞,因為通道是無緩沖的,并且它在設計上不能容納兩個值。有了這篇文章,我陷入了僵局。我在這里發現了類似的問題。如果是這樣,那么這段代碼是如何運行的呢?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 回答
- 0 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消