您的超时不会发生,因为您的goroutine
c1之一会每1.5秒(或大约1.5秒)重复发送一次值在您的频道上,并且只有
c1在2秒钟内没有接收到任何值时才会发生超时。
一旦从接收到一个值
c1,在下一次迭代中将
select再次执行一个 新的
time.After()调用,该调用将返回一个 新的
通道,在该通道上将仅在另外2秒钟后发送一个值。先前
select执行的超时通道将被丢弃,不再使用。
要在2秒后收到超时,请仅创建一次超时通道,例如:
timeout := time.After(2000 * time.Millisecond)for { select { case i := <-c1: fmt.Println(i) case <-timeout: fmt.Println("TIMEOUT") // Will get executed after 2 sec }}输出:
10TIMEOUT101010...



