0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至配饺子 来源:GoLang全栈 作者:小锟哥哥 2022-08-17 11:14 次阅读

一、正常的 channel

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

poYBAGL8W_2AcShBAAAtCLEMIdc627.png

这段代码应该非常熟悉,这样写是否有问题呢?

执行后的结果:

poYBAGL8XA-ALuPyAAAfzJjckaI325.png

如果一个 channel 不在某个协程里面关闭的话,我们的 for range 就会报死锁的错误。

二、关闭后再读取

1、使用 for range 读取关闭后的 channel

现在我们在 for range 之前关闭下这个 channel,看会出现啥情况:

pYYBAGL8XCGAa_6gAABCUPjPvWw471.png

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

poYBAGL8XDWAC2AOAAATcC2lvLk581.png

啥错也没有,正常的读取。

2、直接独立取值

下面我们换直接独立取值的方式:

poYBAGL8XEiAFnr1AAAzJ2ZPpFc917.png

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

pYYBAGL8XFiAfedsAAANM8qHq90050.png

如果我们反复读取呢?

pYYBAGL8XGmAKOJoAABOiTHv13M638.png

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

pYYBAGL8XICAPSEgAAAO5wQ1CgQ342.png

所以结论是:如果 channel 有元素还未读,会正确读出来,哪怕他已经关闭了。

三、往里面写值呢?

最后一起来看下,当 channel 关闭后,往里面写值会怎样?

pYYBAGL8XJiAIHCgAAAgpEO8GC8725.png

这段代码执行后的结果:

pYYBAGL8XKqAZzgXAAAXHxdNrwY953.png

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

poYBAGL8XMSAP3QKAACmUgJdS7I575.png

你学废了么?



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Channel
    +关注

    关注

    0

    文章

    31

    浏览量

    11737
  • go语言
    +关注

    关注

    1

    文章

    156

    浏览量

    8995
收藏 人收藏

    评论

    相关推荐

    aducm360采样率大于200Hz以上时,就会出现读取数据错误是为什么?怎么解决?

    问题: 用该芯片采集8路的ad信号,使用的是连续转换模式,每次ad转换完成进入中断函数,在中断里切换下个通道,依次采集各通道模拟量。但是ad的采样率大于200Hz以上时,就会出现读取数据
    发表于 01-12 07:50

    串口通讯 不间断的会出现数据中断

    运行时候数据接收是正常的,运行一段时间会出现数据为0 跳变很大,会不间断的出现这种情况。。怎么
    发表于 07-26 11:42

    CPU同时从CLATOCPU RAM读取另外一个数据会是什么情况

    关于CLA,如果CLA刚好在写数据到CLATOCPU RAM, CPU同时也要读取数据会出现什么情况?该如何处理?如果CPU同时从CLA
    发表于 06-03 08:54

    mcuisp会出现芯片保护无法读取情况是为什么?

    mcuisp会出现芯片保护无法读取情况是为什么?
    发表于 12-03 07:46

    modbus通讯会出现读取失败是什么情况

    实际情况:4路modbus通讯和一路串口通讯。4路modbus都是使用的libmodbus协议栈,串口使用的serial_v1的驱动。在实际使用中4路modbus都会出现读取失败的情况
    发表于 11-09 14:07

    STM32L4 FreeRTOS+DMA2 Channel 4无法将任何数据写入SD卡怎么处理?

    使用时遇到了问题。为 SDMMC1_TX 选择它时,我可以毫无问题地安装 SD 卡和读取数据。虽然我无法将任何数据写入 SD 卡。我打电话:fresult = f_open(&
    发表于 01-06 08:02

    变频器将进线缺相保护关闭出现缺相运行会出现什么情况

    变频器将进线缺相保护关闭出现缺相运行会出现什么情况?谢谢!
    发表于 12-18 07:19

    为什么笔记本会出现暗屏

    为什么笔记本会出现暗屏   您好,为什么笔记本会出现暗屏呢? 屏暗是怎样产生呢?普遍有以下4种情况:第一种是灯管出
    发表于 01-21 11:27 796次阅读

    水泵为什么会出现烧电机的情况?

    2月15日周五水泵为什么会出现烧电机的情况?带负荷启动可以造成电机损坏;实际使用扬程低于泵铭牌扬程太多
    的头像 发表于 02-16 08:19 1.8w次阅读

    不同的直流电机反接会出现什么情况

    直流电机有很多种,下面就分别介绍一下不同直流电机反接会出现什么情况
    的头像 发表于 03-08 11:40 6254次阅读

    两个IGBT为什么会出现同时导通的情况呢?

    。 对三相电来说,就需要三个桥臂。以两电平为例,每个桥臂上有两个电力电子器件,比如IGBT。大致如下图所示; 这两个IGBT不能同时导通,否则就会出现短路的情况,从而对系统造成损害。 那为什么会出现同时导通的
    的头像 发表于 01-13 16:28 7194次阅读
    两个IGBT为什么<b class='flag-5'>会出现</b>同时导通的<b class='flag-5'>情况</b>呢?

    螺杆式冷水机蒸发器出现故障会出现什么问题

    使用螺杆式冷水机组时会出现各种状况,其中蒸发器是重要的配件,出现故障就会影响整个设备的运行
    的头像 发表于 07-13 10:16 677次阅读
    螺杆式冷水机蒸发器<b class='flag-5'>出现</b>故障<b class='flag-5'>会出现</b>什么问题

    自动无功补偿装置关闭会出现什么状况?

    自动无功补偿装置是现代电力系统中常用的设备之一,它能够实现电力系统功率因数的自动补偿,提高电力系统的稳定性和能效。然而,自动无功补偿装置关闭会出现一些特定的状况,是企业需要了解并
    的头像 发表于 09-07 14:40 1168次阅读

    请教关于LVDS阻抗匹配的问题 LVDS输出阻抗偏大会出现什么情况

    请教关于LVDS阻抗匹配的问题 LVDS输出阻抗偏大会出现什么情况? LVDS(Low Voltage Differential Signaling)是差分信号传输技术,能够提供较高的数据传输速率
    的头像 发表于 10-18 16:48 1524次阅读

    信号源的幅度过大,在两级放大器的输出端分别会出现什么情况

    信号源的幅度过大,在两级放大器的输出端分别会出现什么情况信号源的幅度过大时,在两级放大器的输出端会出现一系列不良影响和问题。这些问题
    的头像 发表于 02-03 17:42 1186次阅读