範例說明:通道

通道是連接並發 goroutine 管線。可以從一個 goroutine 向通道傳送值,並從另一個 goroutine 接收該值。

package main
import "fmt"
func main() {

使用 make(chan val-type) 建立新的通道。通道會依據其傳送的值進行鍵入。

    messages := make(chan string)

使用 channel <- 語法將值傳送至通道。在此,從新的 goroutine 將 "ping" 傳送至我們在上面建立的 messages 通道。

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

<-channel 語法從通道接收值。在此,我們接收在上面傳送的 "ping" 訊息並印出來。

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

當我們執行程式時,"ping" 訊息已成功透過我們的通道從一個 goroutine 傳遞至另一個 goroutine。

$ go run channels.go 
ping

在預設情況下,傳送和接收會區塊運作,直到傳送方和接收方都已準備就緒。此屬性讓我們得以在我們程式尾段等待 "ping" 訊息,而不需要使用其他同步協調。

下個範例:通道緩衝