Go 通道(chan)关闭和后续读取操作
来源:互联网 发布:蓝月传奇官印升级数据 编辑:程序博客网 时间:2024/05/22 13:36
1、通道关闭时间:
一般紧跟在往通道输入最后一个数据之后。
jobs := make(chan int, 5) for i := 1; i < 4; i++ { jobs <- i fmt.Println("sent job", i) // if i == 3 { // close(jobs) // } } close(jobs)
2、读取关闭的无缓存通道:
读取关闭后的无缓存通道,不管通道中是否有数据,返回值都为0和false。
done := make(chan int) go func() { done <- 1 }() close(done) for i := 1; i <= 3; i++ { t, ok := <-done fmt.Println(i, ":", t, ok) }
运行结果:
1:0 false
2:0 false
3:0 false
3、读取关闭的有缓存通道:
读取关闭后的有缓存通道,将缓存数据读取完后,再读取返回值为0和false。
done := make(chan int, 1) go func() { done <- 1 }() close(done) for i := 1; i <= 3; i++ { t, ok := <-done fmt.Println(i, ":", t, ok) }
运行结果:
1:1 true
2:0 false
3:0 false
4、range遍历通道:
通道写完后,必须关闭通道,否则range遍历会出现死锁。
阅读全文
0 0
- Go 通道(chan)关闭和后续读取操作
- GO通道chan
- go语言chan 和 routine活用
- go:chan分为阻塞和非阻塞
- golang基础-goroutine初识、chan存取、goroutine和chan相结合、关闭chan、range取、单元测试
- Understanding Chan Chan's in Go
- Golang 关于通道 Chan 详解
- go语言函数传递问题(map、切片、接口、chan)
- golang chan 单项通道与多项通道
- GO中chan的理解
- go chan使用 匿名函数执行
- 【go 通道】go语言通道channel
- Go语言实战-- 通道
- Go 通道缓存
- 文件操作(创建,打开,读取,关闭等)
- WCF分布操作-如何判断通道关闭并再次创建通道
- 从HBase数据库表中读取数据动态转为DataFrame格式,方便后续用Spark SQL操作(scala实现)
- 通道抠像原理和实例操作
- group_concat
- MessageDigest简介
- 数字迷阵
- 文献管理与信息分析(课堂笔记前六章)
- CSS布局汇总
- Go 通道(chan)关闭和后续读取操作
- 对Http协议的长连接和短连接新的认识
- git diff 将当前改动的文件作为patch
- Mybatis中查询条件为map中嵌套list
- 彻底删除Oracle11g
- Windows下批处理修改文件名
- C#中静态方法和非静态方法的区别
- 2017美团点评前端开发岗位面试题
- LeetCode 437. Path Sum III