Буферизированный канал (Channel Buffering)|Channel Buffering
#
// По умолчанию каналы _не буферизованы_, это означает,
// что они будут принимать отправления (`chan <-`), только
// если есть соответствующий прием (`<- chan`), готовый
// принять отправленное значение. _Буферизованные каналы_
// принимают ограниченное количество значений без
// соответствующего приемника для этих значений.
package main
import "fmt"
func main() {
// Здесь мы `создаем` канал строк с буфером до 2
// значений.
messages := make(chan string, 2)
// Т.к. этот канал буферизирован, мы можем послать
// значения в канал без соответствующего одновременного
// получения.
messages <- "buffered"
messages <- "channel"
// Позже мы можем получить эти значения как обычно.
fmt.Println(<-messages)
fmt.Println(<-messages)
}
$ go run channel-buffering.go
buffered
channel