القنوات (Channels) هي الأنابيب التي تربط الـ goroutines المتوازية. يمكنك إرسال قيم إلى القنوات من goroutine واحد واستقبال تلك القيم في goroutine آخر.
package main
import "fmt"
func main() {
أنشئ قناة جديدة باستخدام make(chan val-type). القنوات محددة بنوع القيم التي تنقلها.
messages := make(chan string)
أرسل قيمة إلى قناة باستخدام صيغة channel <-. هنا نرسل “ping” إلى قناة messages التي أنشأناها أعلاه، من goroutine جديد.
go func() { messages <- "ping" }()
صيغة <-channel تستقبل قيمة من القناة. هنا سنستقبل رسالة “ping” التي أرسلناها أعلاه ونطبعها.
msg := <-messages
fmt.Println(msg)
}
عندما نشغل البرنامج، يتم تمرير رسالة “ping” بنجاح من goroutine إلى آخر عبر القناة الخاصة بنا.
تشغيل البرنامج:
$ go run channels.go
ping
افتراضياً، عمليات الإرسال والاستقبال تعيق التنفيذ حتى يكون كل من المرسل والمستقبل جاهزين. سمحت لنا هذه الخاصية بالانتظار في نهاية برنامجنا لرسالة “ping” دون الحاجة لاستخدام أي أدوات تزامن أخرى.
المثال التالي: تخزين القنوات المؤقت (Channel Buffering).