Go با مثال: کانال‌ها

کانال‌ها (channels) لوله‌هایی هستند که گوروتین‌های هم‌روند را به هم وصل می‌کنند. می‌توانید از یک گوروتین مقادیری را به کانال بفرستید و در گوروتینی دیگر آن‌ها را دریافت کنید.

package main
import "fmt"
func main() {

یک کانال جدید را با make(chan val-type) بسازید. نوع کانال‌ها با نوع مقادیری که منتقل می‌کنند تعیین می‌شود.

    messages := make(chan string)

با نحو channel <- یک مقدار را به کانال بفرستید. اینجا از یک گوروتین جدید، "ping" را به کانال messages که بالا ساختیم می‌فرستیم.

    go func() { messages <- "ping" }()

نحو <-channel یک مقدار را از کانال دریافت می‌کند. اینجا پیام "ping" را که بالا فرستادیم دریافت و چاپ می‌کنیم.

    msg := <-messages
    fmt.Println(msg)
}

وقتی برنامه را اجرا می‌کنیم، پیام "ping" با موفقیت از طریق کانال از یک گوروتین به گوروتین دیگر منتقل می‌شود.

$ go run channels.go 
ping

به‌طور پیش‌فرض، ارسال و دریافت تا زمانی که هم فرستنده و هم گیرنده آماده باشند مسدود (block) می‌شوند. همین ویژگی باعث شد بتوانیم در انتهای برنامه منتظر پیام "ping" بمانیم، بدون نیاز به هیچ همگام‌سازی دیگری.

مثال بعدی: .