因为 select 没有 switch 有的 fall through 的语意,而 select 的目的只是想要从 channel 中读取数据,而不需要 switch 的判断真值操作。
select 跟 IO 多路复用的 select 类似,并且其作用也是类似,两者都用来管理多个 goroutine / thread ,因此选用 select 会便于记忆。
补充,同时操作大量 channel 时,单纯用 select 可能会较为繁琐, golang builtin 里的 reflect 可能会适用类似场景:
1 | cases := make([]reflect.SelectCase, len(chans)) |