在线文档  >   Golang练习   >   通道

Go 通道 channel, 是连接并发 协程 的管道。您可以将值从一个 协程 发送到通道中,并从另一个 协程 中接收。

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)
}

运行结果如下:

$ go run channels.go 
ping

当我们运行程序时,ping 消息通过我们的通道成功地从一个 goroutine传递到另一个goroutine

默认情况下,发送和接收操作是阻塞的,直到发送方和接收方都准备就绪。此属性允许我们在程序结束时等待ping消息,而无需使用任何其他同步操作。