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

Work in Progress / Сайт в процесі розробки

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

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