لغة 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

المثال التالي: .