当channel关闭后再去读取数据会出现啥情况

一、正常的 channel
首先我们先来一段正常操作的代码:
这段代码应该非常熟悉,这样写是否有问题呢?
执行后的结果:
如果一个 channel 不在某个协程里面关闭的话,我们的 for range 就会报死锁的错误。
二、关闭后再读取
1、使用 for range 读取关闭后的 channel
现在我们在 for range 之前关闭下这个 channel,看会出现啥情况:
这样写代码会出现啥问题呢?
啥错也没有,正常的读取。
2、直接独立取值
下面我们换直接独立取值的方式:
state 会返回是否取到了值,这段代码的执行结果是取到第一个值:
如果我们反复读取呢?
我前面读取 3 次,把里面的数据读取完毕后,再读取得到就是零值了。
所以结论是:如果 channel 有元素还未读,会正确读出来,哪怕他已经关闭了。
三、往里面写值呢?
最后一起来看下,当 channel 关闭后,往里面写值会怎样?
这段代码执行后的结果:
会报 panic,具体原因我们可以看 go 的源码,路径为:src/runtime/chan.go
你学废了么?


大众集团前9月的新能源汽车销量组成
分光光度计用途_分光光度计组成部分
mipi协议里面csi和dsi是什么意思
Q2小米智能手机出货量3910万台,排名世界第三
华大北斗斩获2021年“中国芯”优秀技术创新产品奖
当channel关闭后再去读取数据会出现啥情况
便携式无人机反制枪的技术特点是什么
Oracle的基础知识介绍
IPv6耗费31年为什么还没替代IPv4?
temi机器人亮相高交会 备受观众和媒体的喜爱
LoRaWAN节点工作方式ClassB介绍
手机平板点胶加工和导电胶点胶的技术发展
针对ADAS的芯片厂商 理解各家的主要产品线和状态
MIPI转换芯片可达到每通道2.5Gbps
便携应用的电源管理面临的挑战有哪些
土壤水分测定仪指导科学灌溉,助力作物健康生长
高通1.77"彩屏对讲机UI显示方案 — 180多国外文点阵字库
TXGA掀锁式FPC/FFC连接器介绍
嵌入式开发中I2C协议详解
最全嵌入式C语言结构体知识点