简介
本实验旨在测试你对 Go 语言 select 语句的了解,该语句可让你等待多个通道操作。
本实验旨在测试你对 Go 语言 select 语句的了解,该语句可让你等待多个通道操作。
在本实验中,给你两个通道 c1 和 c2,它们会在一段时间后接收一个值。你的任务是使用 select 语句同时等待这两个值,并在每个值到达时打印出来。
select 语句来等待这两个通道。## 我们按预期先后接收到值 "one" 和 "two"。
$ time go run select.go
接收到 one
接收到 two
## 注意,总执行时间仅约为 2 秒,因为 1 秒和 2 秒的 `Sleep` 操作是并发执行的。
实际时间 0m2.245s
以下是完整代码:
// Go 语言的 _select_ 语句可让你等待多个通道操作。将 goroutine 和通道与 select 结合使用是 Go 语言的一项强大功能。
package main
import (
"fmt"
"time"
)
func main() {
// 在我们的示例中,我们将通过两个通道进行选择。
c1 := make(chan string)
c2 := make(chan string)
// 每个通道会在一段时间后接收一个值,以模拟例如在并发 goroutine 中执行的阻塞式 RPC 操作。
go func() {
time.Sleep(1 * time.Second)
c1 <- "one"
}()
go func() {
time.Sleep(2 * time.Second)
c2 <- "two"
}()
// 我们将使用 `select` 语句同时等待这两个值,并在每个值到达时打印出来。
for i := 0; i < 2; i++ {
select {
case msg1 := <-c1:
fmt.Println("接收到", msg1)
case msg2 := <-c2:
fmt.Println("接收到", msg2)
}
}
}
本实验测试你在 Go 语言中使用 select 语句等待多个通道操作的能力。通过完成本实验,你将更好地理解如何使用 select 来协调并发的 goroutine。