简介
实验(Channels lab)旨在测试你对 Go 语言中通道(channels)的理解。通道用于连接并发的 goroutine,允许在它们之间发送和接收值。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
实验(Channels lab)旨在测试你对 Go 语言中通道(channels)的理解。通道用于连接并发的 goroutine,允许在它们之间发送和接收值。
在这个实验中,你需要创建一个新的通道,并从一个新的 goroutine 向其中发送一个值。然后,你将从通道接收该值并打印出来。
make(chan val-type)
语法来创建一个新的通道。channel <-
语法向通道发送一个值。<-channel
语法从通道接收一个值。## 当我们运行程序时,"ping" 消息通过我们的通道成功地从一个 goroutine 传递到另一个 goroutine。
$ go run channels.go
ping
## 默认情况下,发送和接收会阻塞,直到发送方和接收方都准备好。这个特性使我们能够在程序结束时等待 "ping" 消息,而无需使用任何其他同步机制。
下面是完整的代码:
// 通道是连接并发 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)
}
实验(Channels lab)测试你使用 Go 语言中的通道在并发 goroutine 之间发送和接收值的能力。通过完成这个实验,你将更好地理解通道的工作原理以及如何使用它们来提高 Go 语言程序的性能。