Go با مثال: کانال‌های بافردار

کانال‌ها به‌طور پیش‌فرض بدون بافر هستند؛ یعنی فقط زمانی ارسال (chan <-) را می‌پذیرند که یک دریافت متناظر (<- chan) آمادهٔ گرفتن مقدار فرستاده‌شده باشد. کانال‌های بافردار تعداد محدودی مقدار را بدون وجود گیرندهٔ متناظر می‌پذیرند.

package main
import "fmt"
func main() {

اینجا با make کانالی از رشته‌ها می‌سازیم که تا ۲ مقدار را بافر می‌کند.

    messages := make(chan string, 2)

چون این کانال بافردار است، می‌توانیم این مقادیر را بدون یک دریافتِ هم‌زمانِ متناظر به کانال بفرستیم.

    messages <- "buffered"
    messages <- "channel"

بعداً می‌توانیم این دو مقدار را مثل همیشه دریافت کنیم.

    fmt.Println(<-messages)
    fmt.Println(<-messages)
}
$ go run channel-buffering.go 
buffered
channel

مثال بعدی: .