# select 多路复用

URL: https://caijiao.org/go/04-concurrency/05-select
Source: docs/go/04-concurrency/05-select.md
Description: 本节介绍 Go 语言中 select 语句实现通道多路复用的用法，方便处理多个通道操作。

## 1. select 语法

`select` 可以监听多个通道的操作，等待其中一个准备好执行：

```go
select {
case msg1 := <-ch1:
    fmt.Println("Received from ch1:", msg1)
case ch2 <- 10:
    fmt.Println("Sent 10 to ch2")
default:
    fmt.Println("No channel ready")
}
````

## 2. 使用场景

* 同时等待多个通道的读写
* 实现超时机制
* 优雅处理多个异步任务

## 3. 示例：超时处理

```go
select {
case msg := <-ch:
    fmt.Println("Received:", msg)
case <-time.After(time.Second * 2):
    fmt.Println("Timeout")
}
```

## 4. 注意事项

* `select` 会阻塞直到某个 case 可以执行
* `default` 分支可防止阻塞

---

`select` 是 Go 并发编程中强大的多路复用工具。
