القنوات هي الأنابيب التي تصل بين روتينات Go المتزامنة.
يمكنك إرسال قيم إلى القنوات من روتين Go واستقبال تلك القيم
في روتين Go آخر.
packagemain
import"fmt"
funcmain(){
أنشئ قناة جديدة باستخدام make(chan val-type).
يتحدد نوع القناة بحسب نوع القيم التي تنقلها.
messages:=make(chanstring)
أرسل قيمة إلى قناة باستخدام الصياغة channel <-.
نرسل هنا "ping" إلى القناة messages التي أنشأناها
أعلاه، وذلك من روتين Go جديد.
gofunc(){messages<-"ping"}()
تستقبل الصياغة <-channel قيمة من القناة. سنستقبل هنا
الرسالة "ping" التي أرسلناها أعلاه ونطبعها.
msg:=<-messagesfmt.Println(msg)}
عند تشغيل البرنامج، تنتقل الرسالة "ping" بنجاح من روتين
Go إلى آخر عبر قناتنا.
$ go run channels.go
ping
تحجب عمليتا الإرسال والاستقبال افتراضيًا حتى يصبح كل من
المرسل والمستقبِل جاهزًا. أتاحت لنا هذه الخاصية انتظار
الرسالة "ping" في نهاية برنامجنا دون الحاجة إلى أي وسيلة
مزامنة أخرى.