Kanalni bufferlash (Buffered Channels)

Odatiy holatda kanallar unbuffered bo'ladi — ya'ni yuborish (chan <-) faqat mos qabul qilish (<- chan) tayyor bo'lsa amalga oshadi. Buffered kanallar esa mos qabul qiluvchi bo'lmasa ham, cheklangan miqdorda qiymatlarni qabul qila oladi.
package main

import "fmt"

func main() {
    // 2 ta qiymatgacha bufferlanuvchi string kanali yaratamiz
    messages := make(chan string, 2)

    // Bu kanal buffered bo'lgani uchun, mos keluvchi qabul qiluvchisiz ham yubora olamiz
    messages <- "buffered"
    messages <- "channel"

    // Keyin odatdagidek qabul qilib olamiz
    fmt.Println(<-messages)
    fmt.Println(<-messages)
}

Terminalda bajarish:

$ go run channel-buffering.go 
buffered
channel