美文网首页
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