CodeFun Go

通道缓冲

默认情况下,通道是 无缓冲 的,这意味着只有对应的接收(<- chan) 通道准备好接收时,才允许进行发送(chan <-)。

有缓冲通道 允许在没有对应接收者的情况下,缓存一定数量的值。

make 函数的第二个参数指定通道的容量。无缓冲通道的容量为零。这就是为什么如果没有接收器,发送是阻塞的,如果无缓冲通道没有发送器,接收是阻塞的。

a = make(chan , capacity)

由于此通道是有缓冲的, 因此我们可以将这些值发送到通道中,而无需并发的接收。

package main

import (
	"fmt"
)

func main() {
	msg := make(chan string, 2)
	
	msg <- "buffered"
    msg <- "channel"
    fmt.Println(<-msg)
    fmt.Println(<-msg)
}
buffered
channel