go channel close

channel

goroutine - 可以大致理解为一种轻量级的线程(或微线程),它是一种“分配在同一个地址空间内的,能够并行执行的函数”。同时,它是轻量级的,不需要像分配线程那样分配独立的栈空间。

send_onldy & recv_only channel

ic_send_only := make (<-chan int) //a channel that can only send data - arrow going out is sending
ic_recv_only := make (chan<- int) //a channel that can only receive a data - arrow going in is receiving

<-chan int 表示从 channel 中发送出去,所以是send only
chan<- int 表示发送数据到 channel 去,所以是recv only

关闭 channel

ch := make(chan bool) 
close(ch) 
close(ch)  // 这样会panic的,channel不能close两次 

对同一个 channel 进行两次 close,会报 panic 错误

向已经关闭的channel写数据

ch := make(chan string) 
close(ch) 
ch <- "good" // 会panic的

关闭 channel 之后,不可以向 channel 里发送信息,不然会报 panic 错误

从已经关闭的channel读取数据

  • 无缓冲channel或者缓冲channel已经读取完毕
    对于 string,读出来的是空字符串 “”
    对于 int,读出来的是 0
    对于 bool,读出来的是 false
  • 缓冲channel未读取完毕,可以继续读取channel中的剩余的数据
    可以继续读取
//无缓冲channel
ch := make(chan string) 
close(ch) 
i := <- ch // 不会panic, i读取到的值是空 "",  如果channel是bool的,那么读取到的是false 

判断channel是否关闭

i, ok := <- ch 
if ok { 
    println(i) 
} else { 
    println("channel closed") 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 出处---Go编程语言 欢迎来到 Go 编程语言指南。本指南涵盖了该语言的大部分重要特性 Go 语言的交互式简介,...
    Tuberose阅读 18,528评论 1 46
  • Go入门 Go介绍 部落图鉴之Go:爹好还这么努力? 环境配置 安装 下载源码编译安装 下载相应平台的安装包安装 ...
    齐天大圣李圣杰阅读 4,673评论 0 26
  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    JackChen1024阅读 7,618评论 1 143
  • 这两个选项,给你去选,你肯定会选择慈悲;给绝大部分人去选,肯定也会选择这个慈悲(少数自私自利甚至穷凶极恶的人除外)...
    缇萦2阅读 1,956评论 0 0
  • 妈:你都肉嘟嘟的了,该减肥了啊 嘚:给我听韶乐啊! 妈:为什么? 嘚:听了韶乐就会三月不知肉味,三个月不吃肉啊,不...
    嘚里个嘚阅读 179评论 0 2