Go 的 select 让你可以等待多个通道操作。将 goroutines 和通道与 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("received", msg1)
case msg2 := <-c2:
fmt.Println("received", msg2)
}
}
}我们按预期接收到值 “one” 和 “two”。
$ time go run select.go
received one
received two
go run select.go 0.10s user 0.10s system 8% cpu 2.251 total原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。