1.9.4 检查通道的长度和容量

  1. 在Go语言中,可以使用内置的cap()len()函数来查案一个通道的容量和当前长度,但实践中很少这样操作

    1. 很少使用cap()的原因是一个通道的容量尝尝是已知的或不重要的,

    2. 很少使用len()的原因是一个len()函数调用的结果并不能准确地反映出一个通道的当前长度

  2. 需要使用的场景:有时一个goroutine欲将一个未关闭的并且不会再向其发送数据的缓冲通道的所知有数据接收出来,在确保只有此一个goroutine从此通道接收数据的情况下,可用如下方式实现

    for len(c) > 0 {
        value := <-c
        // 对value操作
    }
  3. 有时一个goroutine欲将一个缓冲通道写满而又不阻塞,在确保只有此一个goroutine向此通道发送数据的情况下,可以使用下面的方式实现

    for len(c) < cap(c) {
        c <- aValue
    }

Last updated