1. 对未初始化的 channel 进行写操作

先看下面代码

func main() {var ch chan int              // 只声明,并没有初始化fmt.Printf("ch is %v\n", ch) // ch is <nil>ch <- 1
}

运行上述代码,会有如下输出结果:

ch is <nil>
fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan send (nil chan)]:
main.main()/home/wohu/project/go/src/demo/demo.go:8 +0xa5
exit status 2

从打印结果我们可以看到,当仅仅声明一个 channel 但是并没有初始化时,对该通道进行写操作会一直阻塞 。

2. 对未初始化的 channel 进行读操作

先看下面代码

func main() {var ch chan int              // 只声明,并没有初始化fmt.Printf("ch is %v\n", ch) // ch is <nil>r := <-chfmt.Printf("r is %v\n", r)
}

运行上述代码,会有如下输出结果:

ch is <nil>
fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive (nil chan)]:
main.main()/home/wohu/project/go/src/demo/demo.go:8 +0xb9
exit status 2

同样结果会阻塞,此时报错信息是 chan receive (nil chan)

所以对于未初始化的通道进行读写操作时都会造成阻塞。

3. 对未初始化的 channel 进行关闭操作

那么对未初始化的 channel 进行关闭操作,会出现什么情况,看下面代码

func main() {var ch chan int              // 只声明,并没有初始化fmt.Printf("ch is %v\n", ch) // ch is <nil>close(ch)
}

输出结果为:

ch is <nil>
panic: close of nil channelgoroutine 1 [running]:
main.main()/home/wohu/project/go/src/demo/demo.go:10 +0x99
exit status 2

可以看到会有 panic 发生,所以在使用 channel 时一定要确保对其已经初始化操作。

Go 知识点(08) — 对未初始化的 channel 进行读写操作相关推荐

  1. nil channel与closed channel的读写

    nil channel与closed channel的读写 名词解释 nil channel:未初始化的channel,即没有执行make操作closed channel:执行了closed操作的ch ...

  2. 【C++】C++11 STL算法(八):对未初始化内存的操作(Operations on uninitialized memory)、C库(C library)

    对未初始化内存的操作(Operations on uninitialized memory) 一.uninitialized_copy 1.原型: template< class InputIt ...

  3. 解决方法:ORA-24324 未初始化服务句柄

    安装oracle的时候有一步出现如下错误: ORA-24324:未初始化效力句柄     ORA-24323:不准许此值      ORA-28547:衔接效力器失利,也许是Oracle Net管制差 ...

  4. c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针...

    1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 1 2 3 4 5 6 ...

  5. LPC单片机IO口默认状态、复位状态、未初始化时输出高电平处理

    众所周知,STM32当复位以后,gpio默认是高阻状态,也就是浮空输入. 由STM32切换到LPC1788,发现LPC的IO未初始化时输出高电平,初始化后才能拉低,这样和STM32的设计就不兼容了. ...

  6. python变量初始化的位置不当、程序结果可能会出现问题_解决tensorflow由于未初始化变量而导致的错误问题...

    我写的这个程序 import tensorflow as tf sess=tf.InteractiveSession() x=tf.Variable([1.0,2.0]) a=tf.constant( ...

  7. 初始化全局变量实例说明C语言中初始化和未初始化的全局变量所在不同的段

    本文是一篇关于初始化全局变量的帖子 实例说明C语言中初始化和未初始化的全局变量地点不同的段 一个程序: Makefile: objs := bss.oall: bss bss: $(objs)gcc ...

  8. bool类型未初始化的产生的奇怪现象

    在写C++代码时,有时候可能会忘记对一个布尔变量赋初值,运行程序后会发现产生了一些自己预想不到的结果,或者程序并没有按照设定的分支运行,今天来说一下这背后的原理性的东西.首先来看一段简单代码: int ...

  9. java变量只声明未初始化是否可以直接使用?

    成员变量只声明未初始化在类初始化时会赋予默认值可以直接使用:局部变量必须赋值才可以使用,如果局部变量未赋值,编译无法通过. 报错: 把list的定义放到方法外面,定成全局变量就好了

最新文章

  1. 协程和任务 异步IO 重点
  2. linux系统安装deamonsync,DAEMON Sync的使用心得体会。简易版家庭云服务器!正是我要的那种...
  3. 深度学习 | GAN模式崩溃的理论解释
  4. Echart遇到的问题:tooltip提示框大小异常
  5. IT项目协调-网络整改项目
  6. 搭建XSS (跨网站指令码) 测试平台
  7. 中考物理可不可以用计算机,不能用计算机?2021年起广州中考课目改为“4+4”...
  8. springboot testcontext @sql_举世闻名的 SQL 注入是什么?这个漫画告诉你!
  9. 《敏捷可执行需求说明 Scrum提炼及实现技术》—— 3.5 小结
  10. c语言枚举法在单片机的应用领域,当前单片机主要应用在哪些领域?
  11. Transwarp Inceptor 问题记录与解决
  12. 论文阅读:Axiomatic Characterization of Data-Driven Influence Measures for Classification
  13. 计算机证书都需要哪些知识,计算机资格证书有哪些计算机专业证书有哪些
  14. Git中pull reject和push reject
  15. 将Windows驱动程序从一台计算机复制到另一台计算机
  16. MYSQL的删除和重装
  17. JDK14环境变量配置,JDK版本切换(Win10)
  18. 灰度直方图及直方图均衡化的MATLAB实现
  19. 徐玉玉案有感——安全测试有风险,且行且珍惜
  20. P3332 [ZJOI2013]K大数查询【整体二分】或【树套树】

热门文章

  1. 记录win10快捷键
  2. 2022-2028年中国果壳活性炭行业市场发展调研及竞争战略分析报告
  3. Java并发编程之CountDownLatch、CyclicBarrier和Semaphore
  4. MindSpore后端运行类
  5. cuGraph-GPU图形分析
  6. 将深度学习低延迟推理性能提高一倍
  7. Android布局优化之include、merge、ViewStub
  8. 虚拟机为cenots配置网络
  9. C++ 重载运算符 operator
  10. Python break语句,continue语句,pass 语句