English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دروس أساسية Go

تعليمات التحكم Go

دوال & طرق Go

كائنات Go

قطع & Arrays Go

مؤشرات Go

واجهات Go

توازي Go

استثناءات Go (Error)

متنوعات Go

قناة موجهة بلغة Go

من المعروف أن القنوات هي وسيلة للتواصل بين 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

استخدام القناة الموجهة:القناة الموجهة تستخدم لتوفير أمان النوع في البرنامج، مما يجعل الأخطاء التي يولدها البرنامج أقل. أو، يمكنك أيضًا استخدام القناة الموجهة عندما تريد إنشاء قناة يمكنها فقط إرسال أو استقبال البيانات.