golang select 详解
channel详解文章中讲到过channel的阻塞写、阻塞读、非阻塞写、非阻塞读,这里不再赘述,需要说明的是,select不止用来做channel的非阻塞操作,主要是用来作为多路复用操作channel的,机制和linux的select很像
不同的写法会触发不同的机制,下面我们看看示例// 阻塞读,对应channel的 chanrecv1函数
select {
case <-c0:
return
}
// 非阻塞读,对应channel的 selectnbrecv 函数
select {
case <-c0:
return
default:
return
}
// 多路复用
select {
case <-c0:
return
case <-c1:
return
default:
return
}