如何在Go中监听N个通道:针对任意数量通道的动态select?
大家好!我正在学习Go并遇到了一个问题。我正在编写一个处理来自多个数据源事件的工具。每个数据源在自己的goroutine中运行,并将数据发送到自己的channel。数据源的数量事先未知,并且可能在程序运行期间发生变化(用户可以添加/删除数据源)。
Go中有`select`结构,可以同时监听多个channel。但它是静态的——需要提前指定所有`case`:
```go
select {
case msg1 := <-ch1:
// 处理
case msg2 := <-ch2:
// 处理
case msg3 := <-ch3:
// 处理
}
```
但如果我有一个channel切片`[]chan int`,且数量可能是5、10或100,该怎么办?如何编写一个能处理任意数量channel的动态`select`?
我尝试过使用反射(reflect.Select),但不确定这是否正确。也许有更符合习惯用法的方式?请告诉我如何在Go中正确解决这个问题。