概念簡介
通道(Channels)是連接多個 Go語言 協程的管道。你可以從一個 Go 協程將值發送到通道,然後在別的 Go 協程中接收。
例程代碼
package main
import "fmt"
func main() {
// 使用 `make(chan val-type)` 創建一個新的通道。
// 通道類型就是他們需要傳遞值的類型。
messages := make(chan string)
// 使用 `channel <-` 語法 _發送(send)_ 一個新的值到通道中。這裏
// 我們在一個新的 Go 協程中發送 `"ping"` 到上麵創建的
// `messages` 通道中。
go func() { messages <- "ping" }()
// 使用 `<-channel` 語法從通道中 _接收(receives)_ 一個值。這裏
// 將接收我們在上麵發送的 `"ping"` 消息並打印出來。
msg := <-messages
fmt.Println(msg)
}
執行&輸出
# 我們運行程序時,通過通道,消息 `"ping"` 成功地從一個 Go 協程傳到
# 另一個中。
$ go run channels.go
ping
默認發送和接收操作是阻塞的,直到發送方和接收方都準備完畢。
這個特性允許我們,不使用任何其它的同步操作,來在程序結尾等待
消息 `"ping"`。
課程導航
學習上一篇:Go語言教程:協程 學習下一篇:Go語言教程:通道緩衝
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/channels