跳转至

Go channel

时间:2021-05-17 15:14:14

参考:

  1. Go语言圣经-中文版-Channels

Go channel#

  1. 创建 channel

    # 无缓存channel接收者和发送者都会阻塞等待对方发送或接收
    make(chain int)
    make(chain int,0)
    # 有缓存达到缓存大小会阻塞
    make(chain int,3)
    
  2. 关闭 channel, 关闭之后发送数据将产生panic异常,数据全部接收完之后会返回零值和关闭标识(即从已经关闭的channel中读取数据会直接返回零值)。

    ch := make(chan int,3)
    go func(){
        ch <- 0
        ch <- 1
        ch <- 2
        ch <- 3
    }()
    close(ch)
    
    //isOpen true 表示channel里面还有数据, false 表示channel里面没有数据,并且chanel已经关闭
    v, isOpen := <-ch
    if !isOpen{
        //channel has closed
    }
    
  3. for range 从 channel 中读取数据,如果channel已经关闭并且没有更多数据,循环会结束。