Go 示例: 通道

通道是连接并发 goroutine 的管道。您可以从一个 goroutine 向通道发送值,并在另一个 goroutine 中接收这些值。

package main
import "fmt"
func main() {

使用 make(chan val-type) 创建一个新的通道。通道由它们传递的值类型化。

    messages := make(chan string)

使用 channel <- 语法将值发送到通道。这里我们从一个新的 goroutine 向上面创建的 messages 通道发送 "ping"

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

<-channel 语法从通道接收值。这里我们将接收上面发送的 "ping" 消息并将其打印出来。

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

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

$ go run channels.go 
ping

默认情况下,发送和接收会阻塞,直到发送方和接收方都准备就绪。这个特性允许我们在程序结束时等待 "ping" 消息,而无需使用任何其他同步机制。

下一个示例:通道缓冲.