带缓冲的信道

信道可以是 带缓冲的。将缓冲长度作为第二个参数提供给 make 来初始化一个带缓冲的信道:

  1. ch := make(chan int, 100)

仅当信道的缓冲区填满后,向其发送数据时才会阻塞。当缓冲区为空时,接受方会阻塞。

修改示例填满缓冲区,然后看看会发生什么。

buffered-channels.go

  1. package main
  2. import "fmt"
  3. func main() {
  4. ch := make(chan int, 2)
  5. ch <- 1
  6. ch <- 2
  7. fmt.Println(<-ch)
  8. fmt.Println(<-ch)
  9. }