Go за Прикладом: Буферизація каналiв

Відповідно до стандартних налаштувань, канали не буферизуються, тобто вони є такими - що тільки прийматимуть повідомлення (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

Наступний приклад: Синхронізація каналу.