Go 语言中使用多个并行 select 语句的示例
以下是一个例子,使用了多个并行的 select 语句:
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan string)
ch2 := make(chan string)
ch3 := make(chan string)
done := make(chan bool)
go func() {
time.Sleep(2 * time.Second)
ch1 <- 'Hello'
}()
go func() {
time.Sleep(4 * time.Second)
ch2 <- 'World'
}()
go func() {
time.Sleep(6 * time.Second)
ch3 <- '!'
}()
go func() {
select {
case msg := <-ch1:
fmt.Println(msg)
case msg := <-ch2:
fmt.Println(msg)
case msg := <-ch3:
fmt.Println(msg)
}
done <- true
}()
go func() {
select {
case msg := <-ch1:
fmt.Println(msg)
case msg := <-ch2:
fmt.Println(msg)
case msg := <-ch3:
fmt.Println(msg)
}
done <- true
}()
go func() {
select {
case msg := <-ch1:
fmt.Println(msg)
case msg := <-ch2:
fmt.Println(msg)
case msg := <-ch3:
fmt.Println(msg)
}
done <- true
}()
<-done
<-done
<-done
}
在这个例子中,我们创建了 3 个通道 (ch1,ch2 和 ch3) 和一个用于通知完成的通道 (done)。
然后,我们启动了 3 个并发的 goroutine,每个都有一个 select 语句来接收来自不同通道的消息。每个 select 语句都会在不同的时间间隔后接收到消息,并打印出来。
最后,我们使用 3 个 <-done 语句来等待所有的 goroutine 完成。
这样,我们就实现了多个并行的 select 语句。当有多个通道都准备好发送消息时,select 语句会随机选择其中一个来接收消息。
原文地址: https://www.cveoy.top/t/topic/p6VF 著作权归作者所有。请勿转载和采集!