select
-
作用:用来监听channel上的数据流动。
-
用法:参考switch case语句,但case后必须是IO操作,不可以任意写判别表达式。
-
注意事项:
- 监听case中,没有满足监听条件,阻塞;
- 监听的case中,有多个满足监听条件,任选一个执行;
- 可以使用default来处理所有case都不满足监听条件的情况,通常不用,因为这样会导致忙轮询;
- select自身不带有循环机制,得借助外层for循环来实现循环监听;
- break只能跳出select中的一个case选项,类似于switch中的用法。
-
select超时处理
-
select监听time.After()中channel的读事件,如果定时时间到,系统会向该channel中写入系统当前时间。
select { case <- time.After(time.Second) 定时到达之后,要处理的内容 }
-