美文网首页
go channel close

go channel close

作者: SongLiang | 来源:发表于2018-06-11 18:47 被阅读0次

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 channel close

      本文链接:https://www.haomeiwen.com/subject/afwheftx.html