لغة Go بالأمثلة: القنوات (chan)

القنوات هي الأنابيب التي تصل بين روتينات Go المتزامنة. يمكنك إرسال قيم إلى القنوات من روتين Go واستقبال تلك القيم في روتين Go آخر.

package main
import "fmt"
func main() {

أنشئ قناة جديدة باستخدام make(chan val-type). يتحدد نوع القناة بحسب نوع القيم التي تنقلها.

    messages := make(chan string)

أرسل قيمة إلى قناة باستخدام الصياغة channel <-. نرسل هنا "ping" إلى القناة messages التي أنشأناها أعلاه، وذلك من روتين Go جديد.

    go func() { messages <- "ping" }()

تستقبل الصياغة <-channel قيمة من القناة. سنستقبل هنا الرسالة "ping" التي أرسلناها أعلاه ونطبعها.

    msg := <-messages
    fmt.Println(msg)
}

عند تشغيل البرنامج، تنتقل الرسالة "ping" بنجاح من روتين Go إلى آخر عبر قناتنا.

$ go run channels.go 
ping

تحجب عمليتا الإرسال والاستقبال افتراضيًا حتى يصبح كل من المرسل والمستقبِل جاهزًا. أتاحت لنا هذه الخاصية انتظار الرسالة "ping" في نهاية برنامجنا دون الحاجة إلى أي وسيلة مزامنة أخرى.

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