我期待这段代码进入无限循环,发送和接收消息。但它似乎既不发送也不接收。为什么?
go func() {
for {
select {
case ch1 <- 1:
println("sent 1 ")
case c := <-ch1:
println(" received ", c)
}
time.Sleep(time.Second)
}
}()
Run Code Online (Sandbox Code Playgroud)
Cer*_*món 11
该通道的文件说:
如果容量为零或不存在,则通道没有缓冲,只有当发送方和接收方都准备好时,通信才能成功。
在选择文件说:
如果可以进行一个或多个通信,则通过统一伪随机选择选择可以进行的单个通信。
接收案例无法继续,因为没有准备好的发件人。发送案例无法继续,因为没有准备好的接收者。程序在选择中死锁。
单个 goroutine 不能使发送和接收都准备好,因为 goroutine 一次只能执行选择的一个分支。
如果通道被缓冲,程序将永远循环(playground 示例)。
| 归档时间: |
|
| 查看次数: |
2916 次 |
| 最近记录: |