来自不同渠道的数据进入 select 语句可以被忽略吗?

Can data coming from different channels into select statement get ignored?

如果没有在 select 语句中的正确时刻捕获通过 golang 中的通道传入的数据,是否有可能被忽略?

例如,假设有这个 select 语句:

for {
    select {
    case <-timer.C:
        //block A
    default:
        // block B takes 2 seconds.
    }
}

如果计时器在块 B 正在 运行ning 时结束,块 A 是否仍然 运行 在循环的下一次迭代中还是通道的传入数据丢失?

当定时器超时后,它会发送C上的当前时间。如果此时没有人在从C上读取,发送会阻塞,所以它会一直等到接收到值。在这种情况下,它将等到循环的下一次迭代。

通道被设计成一种同步机制,因此它们不需要读者和作者已经同步。