golang select 多路复用
时间: 2023-09-01 11:10:08 浏览: 158
在 Go 中,`select` 语句用于实现多路复用,它可以同时等待多个通道操作。具体而言,`select` 语句会从多个通道中选择一个可操作的通道进行读写操作,如果有多个通道同时可操作,那么会随机选择一个执行。
下面是一个简单的示例代码,演示了如何使用 `select` 实现多路复用:
```go
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan string)
ch2 := make(chan string)
go func() {
time.Sleep(1 * time.Second)
ch1 <- "Hello"
}()
go func() {
time.Sleep(2 * time.Second)
ch2 <- "World"
}()
select {
case msg1 := <-ch1:
fmt.Println("Received:", msg1)
case msg2 := <-ch2:
fmt.Println("Received:", msg2)
case <-time.After(3 * time.Second):
fmt.Println("Timeout")
}
}
```
在上面的示例中,我们创建了两个通道 `ch1` 和 `ch2`。然后使用两个匿名函数分别向这两个通道发送消息。通过 `select` 语句,我们可以同时等待这两个通道的消息,并选择其中一个可操作的通道进行读取。如果 `select` 语句超过指定时间(3秒)仍然没有可操作的通道,那么会执行超时逻辑。
这就是使用 `select` 实现多路复用的基本用法。你可以根据具体的需求,灵活地使用 `select` 来处理多个通道的操作。
阅读全文