23.آموزش GO با مثال(کانالها)

کانالها لوله هایی هستند که به طور همزمان 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---------------------------------------- بافر کردن کانال>>