golang 无缓冲区通道的 range 操作

 

对一个无缓冲通道(chan)进行 range 操作意味着想要迭代并消费通道中的所有值。

但是,由于无缓冲通道的特性,这种操作具有特定的行为和潜在的副作用,主要体现在以下几点:

 

阻塞行为:

  当你开始对无缓冲通道进行 range 操作时,每次循环迭代都会尝试从通道接收一个值。

  如果通道中有值可用,range 会继续进行。

  如果通道中没有值并且没有其他 goroutine 向通道发送值,range 会阻塞,等待值的到来。

  如果通道被关闭并且没有更多的值,range 循环将结束。


通道关闭的重要性:

  为了使 range 循环正常结束,通常需要在所有值发送完毕后关闭通道。

  如果通道没有被关闭,range 可能会永远阻塞,因为没有值可以接收,也没有信号表明通道已经完成发送。

 

https://github.com/farwish/go-lab/blob/master/src/builtin/chan_range.go

Link:https://www.cnblogs.com/farwish/p/18308311

posted on 2024-07-17 21:21  ercom  阅读(12)  评论(0编辑  收藏  举报