کانالها لوله هایی هستند که به طور همزمان goroutine ها را به یکدیگر متصل میکنند. شما میتونید یک مقدار به وسیله کانالها از یک 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" صبر کنیم بدون اینکه از هماهنگ سازی های دیگر استفاده کنیم.
<<(روالهای گو)Goroutines---------------------------------------- بافر کردن کانال>>