Go 知识点(08) — 对未初始化的 channel 进行读写操作
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 进行读写操作相关推荐
- nil channel与closed channel的读写
nil channel与closed channel的读写 名词解释 nil channel:未初始化的channel,即没有执行make操作closed channel:执行了closed操作的ch ...
- 【C++】C++11 STL算法(八):对未初始化内存的操作(Operations on uninitialized memory)、C库(C library)
对未初始化内存的操作(Operations on uninitialized memory) 一.uninitialized_copy 1.原型: template< class InputIt ...
- 解决方法:ORA-24324 未初始化服务句柄
安装oracle的时候有一步出现如下错误: ORA-24324:未初始化效力句柄 ORA-24323:不准许此值 ORA-28547:衔接效力器失利,也许是Oracle Net管制差 ...
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针...
1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 1 2 3 4 5 6 ...
- LPC单片机IO口默认状态、复位状态、未初始化时输出高电平处理
众所周知,STM32当复位以后,gpio默认是高阻状态,也就是浮空输入. 由STM32切换到LPC1788,发现LPC的IO未初始化时输出高电平,初始化后才能拉低,这样和STM32的设计就不兼容了. ...
- python变量初始化的位置不当、程序结果可能会出现问题_解决tensorflow由于未初始化变量而导致的错误问题...
我写的这个程序 import tensorflow as tf sess=tf.InteractiveSession() x=tf.Variable([1.0,2.0]) a=tf.constant( ...
- 初始化全局变量实例说明C语言中初始化和未初始化的全局变量所在不同的段
本文是一篇关于初始化全局变量的帖子 实例说明C语言中初始化和未初始化的全局变量地点不同的段 一个程序: Makefile: objs := bss.oall: bss bss: $(objs)gcc ...
- bool类型未初始化的产生的奇怪现象
在写C++代码时,有时候可能会忘记对一个布尔变量赋初值,运行程序后会发现产生了一些自己预想不到的结果,或者程序并没有按照设定的分支运行,今天来说一下这背后的原理性的东西.首先来看一段简单代码: int ...
- java变量只声明未初始化是否可以直接使用?
成员变量只声明未初始化在类初始化时会赋予默认值可以直接使用:局部变量必须赋值才可以使用,如果局部变量未赋值,编译无法通过. 报错: 把list的定义放到方法外面,定成全局变量就好了
最新文章
- 协程和任务 异步IO 重点
- linux系统安装deamonsync,DAEMON Sync的使用心得体会。简易版家庭云服务器!正是我要的那种...
- 深度学习 | GAN模式崩溃的理论解释
- Echart遇到的问题:tooltip提示框大小异常
- IT项目协调-网络整改项目
- 搭建XSS (跨网站指令码) 测试平台
- 中考物理可不可以用计算机,不能用计算机?2021年起广州中考课目改为“4+4”...
- springboot testcontext @sql_举世闻名的 SQL 注入是什么?这个漫画告诉你!
- 《敏捷可执行需求说明 Scrum提炼及实现技术》—— 3.5 小结
- c语言枚举法在单片机的应用领域,当前单片机主要应用在哪些领域?
- Transwarp Inceptor 问题记录与解决
- 论文阅读:Axiomatic Characterization of Data-Driven Influence Measures for Classification
- 计算机证书都需要哪些知识,计算机资格证书有哪些计算机专业证书有哪些
- Git中pull reject和push reject
- 将Windows驱动程序从一台计算机复制到另一台计算机
- MYSQL的删除和重装
- JDK14环境变量配置,JDK版本切换(Win10)
- 灰度直方图及直方图均衡化的MATLAB实现
- 徐玉玉案有感——安全测试有风险,且行且珍惜
- P3332 [ZJOI2013]K大数查询【整体二分】或【树套树】