多路选择和超时控制
多路选择机制
使用select多路选择机制,实现Go中的超时控制
//多渠道的选择,从chan上等待消息
//每一个case后面跟着一个阻塞事件 运行到select之后后面任意阻塞事件处于非阻塞状态,就会执行case定义的部分
//不能依赖于case所定义的顺序,没有default并且没有事件准备好,会阻塞在select事件上
select{
case ret := <-retCh1:
t.Logf("result %s",ret)
case ret := <-retCh2:
t.Logf("result %s",ret)
default:
t.Error("No one returned")
}
//超时控制
//从chan上接收消息的时候,我们不希望,等待的时间超过某一个时刻
//超过时间,消息会返回,阻塞状态也能结束
select{
case ret :=<-retCh:
t.Logf("result %s",ret)
case <-time.After(time.Second*1):
t.Error("time out")
}