Golang channel 特性

最近在项目中遇到了 Go channel 的一些问题,在此记录下 close channel 的一些特性。

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

  

  • 向已经关闭的channel写数据
ch := make(chan string) 
close(ch) 
ch <- "good" // 会panic的
  • 从已经关闭的channel读取数据 
    需要分两种情况: 
    • 无缓冲channel或者缓冲channel已经读取完毕
    • 缓冲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") 
}
posted @ 2017-04-21 16:02  丹江流  阅读(382)  评论(0编辑  收藏  举报