وقتی شما از کانالها به عنوان پارامترهای تابعی استفاده میکنید،میتونید مشخص کنید که کانال برای ارسال و دریافت مقادیر است. این خاصیت نوع-ایمنی برنامه را افزایش میدهد .
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 >>