Golang range channel、close channel 遍历和关闭
来源:互联网 发布:sql语句查询最高两位 编辑:程序博客网 时间:2024/05/16 23:44
Golang channel的range、close操作
关于channel读取时的返回值
Often, functions use these additional results to indicate some kind of error, either by returning an error as in the call to os.Open, or a bool, usually called ok. If a map lookup, type assertion, or channel receive appears in an assignment in which two results are expected, each produces an additional boolean result:
v, ok = m[key] // map lookup
v, ok = x.(T) // type assertion
v, ok = <-ch // channel receive
对上的文字解释下:map查找,类型断言和读channel数据都会返回两个值,第二个返回值是表示成功或失败的布尔值。
读channel时,第二个值返回为false时表示channel被关闭。
一、循环从channel中读取数据
- 方法一:
for{ if value,ok:=<-ch;ok{ //do somthing }else{ break;//表示channel已经被关闭,退出循环 }}
- 方法二:
//rangech:=make(chan int ,3)ch<-1ch<-2ch<-3for value:=range ch{ fmt.Print(value)}//输出:123//然后会一直阻塞当前协程,如果在其他协程中调用了close(ch),那么就会跳出for range循环。这也就是for range的特别之处
二、关闭channel
关闭一个channel只需要调用函数close()即可
注意:
1. 如果channel已经关闭,继续往它发送数据会导致panic: send on closed channel
2. 关闭一个已经关闭的channel也会导致panic: close of closed channel
3. channel关闭后,仍然可以从中读取以发送的数据,读取完数据后,将读取到零值,可以多次读取。
func test(){ ch:=make(chan int,3) ch<-3 ch<-2 ch<-1 close(ch) fmt.Print(<-ch) fmt.Print(<-ch) fmt.Print(<-ch) fmt.Print(<-ch) fmt.Print(<-ch)}//输出:32100
- Golang range channel、close channel 遍历和关闭
- Golang 如何优雅关闭 channel
- golang:channel
- golang的缓冲channel和无缓冲channel的区别
- golang中并发sync和channel
- golang中并发sync和channel
- golang中并发sync和channel
- golang中并发sync和channel
- golang中并发sync和channel
- Go: channel meet range
- golang 的channel
- [Golang]妙用channel
- [Golang]妙用channel(2)
- Golang goroutine and channel
- golang的channel使用
- Golang Channel用法简编
- Golang Channel 整理
- Golang Channel用法简编
- 文字无缝滚动
- IDA6.8 脚本学习:
- 小米2015笔试编程题
- OpenCV单窗口显示多幅图像的代码
- iOS开发 数据存储之WCDB的使用
- Golang range channel、close channel 遍历和关闭
- 插入排序
- 1、Spring技术栈-博客系统基础架构
- UDEV规则参数详细解释使用
- phpstorm安装及xdebug断点调试
- bootstrap 后台管理系统工作界面布局方式
- 测试流程
- 恶搞鼠标追不上QQ
- java 使用POI框架进行Excel表格的导出