Go通道缓冲

优质
小牛编辑
126浏览
2023-12-01

默认情况下,通道是不带缓冲区的。
发送端发送数据,同时必须又接收端相应的接收数据。
而带缓冲区的通道则允许发送端的数据发送和接收端的数据获取处于异步状态,就是说发送端发送的数据可以放在缓冲区里面,可以等待接收端去获取数据,而不是立刻需要接收端去获取数据。
不过由于缓冲区的大小是有限的,所以还是必须有接收端来接收数据的,否则缓冲区一满,数据发送端就无法再发送数据了。

  1. package main
  2. import "fmt"
  3. func main() {
  4. // 这里我们定义了一个可以存储字符串类型的带缓冲通道
  5. // 缓冲区大小为2
  6. messages := make(chan string, 2)
  7. // 因为messages是带缓冲的通道,我们可以同时发送两个数据
  8. // 而不用立刻需要去同步读取数据
  9. messages <- "buffered"
  10. messages <- "channel"
  11. // 然后我们和上面例子一样获取这两个数据
  12. fmt.Println(<-messages)
  13. fmt.Println(<-messages)
  14. }

运行结果

  1. buffered
  2. channel