以下是一个简单的示例代码,演示了如何使用 Go 语言的 select
关键字:
package main
import (
"fmt"
"time"
)
func main() {
c1 := make(chan int)
c2 := make(chan int)
go func() {
time.Sleep(1 * time.Second)
c1 <- 10
}()
go func() {
time.Sleep(2 * time.Second)
c2 <- 20
}()
select {
case n := <-c1:
fmt.Println("Received from c1:", n)
case n := <-c2:
fmt.Println("Received from c2:", n)
case <-time.After(3 * time.Second):
fmt.Println("Timeout")
}
}
在这个示例中,我们创建了两个无缓冲的通道 c1
和 c2
,并创建了两个协程,每个协程在一段时间后向通道发送一个整数值。
在 main
函数中,我们使用了 select
关键字来等待这两个通道的数据,直到其中一个通道有数据可读时,就会执行对应的 case
分支。如果 select
在指定的时间内都没有收到任何数据,那么就会执行 default
分支。
在本示例中,我们设置了一个超时时间为 3 秒,如果在这个时间内还没有数据可用,就会输出 "Timeout"。因为 c1
和 c2
中的数据会在 1 秒和 2 秒后才会发送,所以最终输出的是 "Received from c1: 10"。