English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
من المعروف أن القنوات هي وسيلة للتواصل بين goroutines التي تعمل بشكل متوازي، لذا يمكنها إرسال واستقبال البيانات فيما بينها. بشكل افتراضي، القنوات ثنائية الاتجاه، ولكن يمكنك أيضًا إنشاء قناة موجهة. القناة التي يمكنها فقط استقبال البيانات أو القناة التي يمكنها فقط إرسال البيانات هيالقناة الموجهةيمكن أيضًا إنشاء القناة الموجهة باستخدام دالة make()، كما يلي:
//للإستقبال البيانات فقط c1:= make(<- chan bool) //لإرسال البيانات فقط c2:= make(chan<-bool)
مثال استخدام القناة الموجهة 1:
package main import "fmt" func main() { //للإستقبال البيانات فقط mychanl1 := make(<-chan string) //لإرسال البيانات فقط mychanl2 := make(chan<- string) //عرض نوع القناة fmt.Printf("%T", mychanl1) fmt.Printf("\n%T", mychanl2) }
الإخراج:
<-chan string chan<- string
في لغة Go، يُسمح بتحويل القناة الثنائية الاتجاه إلى قناة موجهة، بمعنى آخر، يمكنك تحويل القناة الثنائية الاتجاه إلى قناة موجهة فقط لإرسال البيانات أو استقبال البيانات، ولكن العكس صحيح أيضًا. كما يظهر في البرنامج التالي:
package main import "fmt" func sending(s chan<- string) { s <- "w3codebox" } func main() { //إنشاء قناة ثنائية الاتجاه mychanl := make(chan string) //في هذا المكان، يقوم دالة sending() بتحويل القناة الثنائية الاتجاه إلى قناة موجهة فقط لإرسال البيانات go sending(mychanl) //في هذا المكان، القناة موجهة فقط داخل goroutine، بينما خارج goroutine، القناة ثنائية الاتجاه، لذا تُطبع w3codebox fmt.Println(<-mychanl) }
الإخراج:
w3codebox
استخدام القناة الموجهة:القناة الموجهة تستخدم لتوفير أمان النوع في البرنامج، مما يجعل الأخطاء التي يولدها البرنامج أقل. أو، يمكنك أيضًا استخدام القناة الموجهة عندما تريد إنشاء قناة يمكنها فقط إرسال أو استقبال البيانات.