通道是連接並發 goroutine 管線。可以從一個 goroutine 向通道傳送值,並從另一個 goroutine 接收該值。
package main
import "fmt"
func main() {
使用 make(chan val-type) 建立新的通道。通道會依據其傳送的值進行鍵入。
make(chan val-type)
messages := make(chan string)
使用 channel <- 語法將值傳送至通道。在此,從新的 goroutine 將 "ping" 傳送至我們在上面建立的 messages 通道。
channel <-
"ping"
messages
go func() { messages <- "ping" }()
<-channel 語法從通道接收值。在此,我們接收在上面傳送的 "ping" 訊息並印出來。
<-channel
msg := <-messages fmt.Println(msg) }
當我們執行程式時,"ping" 訊息已成功透過我們的通道從一個 goroutine 傳遞至另一個 goroutine。
$ go run channels.go ping
在預設情況下,傳送和接收會區塊運作,直到傳送方和接收方都已準備就緒。此屬性讓我們得以在我們程式尾段等待 "ping" 訊息,而不需要使用其他同步協調。
下個範例:通道緩衝。
作者 Mark McGranaghan 和 Eli Bendersky | 原始碼 | 授權