Go 示例: 通道缓冲

默认情况下,通道是无缓冲的,这意味着它们只会在有相应的接收(<- chan)准备接收发送的值时才接受发送(chan <-)。带缓冲的通道可以接受一定数量的值,而无需相应的接收器来接收这些值。

package main
import "fmt"
func main() {

这里我们使用make创建了一个最多缓冲 2 个值的字符串通道。

    messages := make(chan string, 2)

由于此通道是带缓冲的,因此我们可以在没有相应的并发接收的情况下将这些值发送到通道中。

    messages <- "buffered"
    messages <- "channel"

稍后我们可以像往常一样接收这两个值。

    fmt.Println(<-messages)
    fmt.Println(<-messages)
}
$ go run channel-buffering.go 
buffered
channel

下一个示例:通道同步.