一、正常的 channel
首先我们先来一段正常操作的代码:

这段代码应该非常熟悉,这样写是否有问题呢?
执行后的结果:

如果一个 channel 不在某个协程里面关闭的话,我们的 for range 就会报死锁的错误。
二、关闭后再读取
1、使用 for range 读取关闭后的 channel
现在我们在 for range 之前关闭下这个 channel,看会出现啥情况:

这样写代码会出现啥问题呢?

啥错也没有,正常的读取。
2、直接独立取值
下面我们换直接独立取值的方式:

state 会返回是否取到了值,这段代码的执行结果是取到第一个值:

如果我们反复读取呢?

我前面读取 3 次,把里面的数据读取完毕后,再读取得到就是零值了。

所以结论是:如果 channel 有元素还未读,会正确读出来,哪怕他已经关闭了。
三、往里面写值呢?
最后一起来看下,当 channel 关闭后,往里面写值会怎样?

这段代码执行后的结果:

会报 panic,具体原因我们可以看 go 的源码,路径为:src/runtime/chan.go

你学废了么?
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Channel
+关注
关注
0文章
32浏览量
12496 -
go语言
+关注
关注
1文章
159浏览量
9848
发布评论请先 登录
相关推荐
热点推荐
aducm360采样率大于200Hz以上时,就会出现读取的数据错误是为什么?怎么解决?
问题: 用该芯片采集8路的ad信号,使用的是连续转换模式,每次ad转换完成进入中断函数,在中断里切换下个通道,依次采集各通道模拟量。但是当ad的采样率大于200Hz以上时,就会出现读取的数据
发表于 01-12 07:50
使用ADS1256中出现重新上电会出现读取AD值不一样的情况,怎么解决?
您好,我在使用ADS1256中出现重新上电会出现读取AD值不一样的情况:我这边一直给一个恒定的电压输入,重复上电断电读取AD值的实验,10
发表于 12-13 09:34
请问AFE4400读取的数据什么时候才会出现0?
我目前用的是AFE4400,读取的是红光、红外光和去环境红光,我想知道读取的数据什么时候才会出现0?随着光照增强,是不是接受到的数据会变得
发表于 12-20 10:03
modbus通讯会出现读取失败是什么情况
实际情况:4路modbus通讯和一路串口通讯。4路modbus都是使用的libmodbus协议栈,串口使用的serial_v1的驱动。在实际使用中4路modbus都会出现读取失败的情况
发表于 11-09 14:07
两个IGBT为什么会出现同时导通的情况呢?
。 对三相电来说,就需要三个桥臂。以两电平为例,每个桥臂上有两个电力电子器件,比如IGBT。大致如下图所示; 这两个IGBT不能同时导通,否则就会出现短路的情况,从而对系统造成损害。 那为什么会出现同时导通的
自动无功补偿装置关闭后会出现什么状况?
自动无功补偿装置是现代电力系统中常用的设备之一,它能够实现电力系统功率因数的自动补偿,提高电力系统的稳定性和能效。然而,当自动无功补偿装置关闭后,会出现一些特定的状况,是企业需要了解并
请教关于LVDS阻抗匹配的问题 LVDS输出阻抗偏大会出现什么情况?
请教关于LVDS阻抗匹配的问题 LVDS输出阻抗偏大会出现什么情况? LVDS(Low Voltage Differential Signaling)是差分信号传输技术,能够提供较高的数据传输速率
当信号源的幅度过大,在两级放大器的输出端分别会出现什么情况?
当信号源的幅度过大,在两级放大器的输出端分别会出现什么情况? 当信号源的幅度过大时,在两级放大器的输出端会出现一系列不良影响和问题。这些问题
MCX射频头使用不当会出现什么情况
德索工程师说道MCX射频头使用不当可能会出现多种情况,这些问题不仅影响设备的性能,还可能对系统整体造成损害。以下是对MCX射频头使用不当可能出现情况的详细分析:
连接不稳:如果M
当channel关闭后再去读取数据会出现啥情况
评论