go channel close

2018-06-11  本文已影响0人  SongLiang

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
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") 
}
上一篇下一篇

猜你喜欢

热点阅读