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

Далее: .