如果在select语句中没有及时捕获到golang中通道的数据,是否有可能被忽略?
例如,假设有这个select语句:
for {
select {
case <-timer.C:
//block A
default:
// block B takes 2 seconds.
}
}
如果在块B运行时计时器结束,块A是否仍然在循环的下一次迭代中运行,或者通道的传入数据是否丢失?
答案 0 :(得分:3)
当计时器到期时,它将在C上发送当前时间。如果当时没有人从C读取,则发送将被阻止,因此它将等待直到接收到该值。在这种情况下,它将等到循环的下一次迭代。
频道被设计为同步机制,因此它们不需要已经同步读者和作者。