考虑两个例子:第一: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 关注
- 86 浏览
添加回答
举报
0/150
提交
取消