栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go关闭channel的n种方式(关闭时机)总结与分享

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go关闭channel的n种方式(关闭时机)总结与分享

channel关闭不当或不关闭会引发很多问题,比如举1个很简单的例子:

两个生成者协程不断给dataCh写数据,main goroutine在持续消费dataCh的数据,这个场景假设每个生产者各生产指定数量数据后需要终止,而如果在第一个和第二个生产者中生产完时都close,或只在其中一个中close dataCh都是不行的,耳熟能详的一个报错:panic: send on closed channel   ; 如果置close于不顾,则又会fatal error: all goroutines are asleep - deadlock!    。。。

且在消费者无法确定每读取完一个数据后是否达到了可关闭的状态时,在消费者协程中关闭dataCh也是不可取的。

关闭channel重点在于关闭的时机、关闭的位置是否恰当。以下基于长期实践和探索,总结出来,各位看官钟爱哪种方式则选用哪种。

先说说最简单的场景:单个ch的发送方是一个goroutine,则发送完毕后直接close即可,代码很简单不展示了;

(演示代码与思想均个人构造原创,欢迎大家阅读)

目录

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909610.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号