26.آموزش GO با مثال(هدایت کانال)

وقتی شما از کانالها به عنوان پارامترهای تابعی استفاده میکنید،میتونید مشخص کنید که کانال برای ارسال و دریافت مقادیر است. این خاصیت نوع-ایمنی برنامه را افزایش میدهد .

package main
import "fmt"

تابع ping تنها یک کانال برای ارسال مقادیر را قبول میکند. اگر بخواهیم سعی کنیم که دریافت را روی این کانال داشته باشیم میتونه یک خطای زمان اجرا رو پدید بیاره.

func ping(pings chan<- string, msg string) {
    pings <- msg
}

تابع pong کانال اول برای دریافت مقادیر(pings) و کانال دوم را برای ارسال مقادیر (pongs) قبول میکند.

func pong(pings <-chan string, pongs chan<- string) {
    msg := <-pings
    pongs <- msg
}
func main() {
    pings := make(chan string, 1)
    pongs := make(chan string, 1)
    ping(pings, "passed message")
    pong(pings, pongs)
    fmt.Println(<-pongs)
}

اجرای این برنامه

$ go run channel-directions.go
passed message

<<هماهنگ سازی کانال-------------------------------------- Select >>