关于select多路复用的问题

MrDoubleU · · 1130 次点击
<a href="/user/birdkiller" title="@birdkiller">@birdkiller</a> `default` 可以编译通过但是程序上看其实没有意义,循环会一直走 `default` 分支。为 `channel` 加一个缓存,就解决了。 你会发现结果是 0, 2, 4 ... 因为 for 循环 i = 1 时执行的是 received,所以每次发送 i 都是间隔一次循环。 ``` package main import &#34;fmt&#34; func main() { ch := make(chan int, 1) for i := 0; i &lt; 10; i++ { select { case x := &lt;-ch: fmt.Println(&#34;received&#34;, x) case ch &lt;- i: fmt.Println(&#34;send&#34;, i) default: fmt.Println(&#34;阻塞了&#34;, i) } } } ```
#8
更多评论
for循环只跑一下就被阻塞了,还能发生什么,case ch&lt;-i
#1
没有向通道写入数据
#2