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   ercom  阅读(26)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2016-07-17 [php-src] 窥探Php内核中的数组与面向对象

统计

点击右上角即可分享
微信分享提示