golang select详解
Golang
556
0
0
2022-05-06
golang select 详解
channel详解文章中讲到过channel的阻塞写、阻塞读、非阻塞写、非阻塞读,这里不再赘述,需要说明的是,select不止用来做channel的非阻塞操作,主要是用来作为多路复用操作channel的,机制和linux的select很像
| 不同的写法会触发不同的机制,下面我们看看示例 |
| select { |
| case <-c0: |
| return |
| } |
| |
| |
| select { |
| case <-c0: |
| return |
| default: |
| return |
| } |
| |
| |
| select { |
| case <-c0: |
| return |
| case <-c1: |
| return |
| default: |
| return |
| } |
从上面的代码中可以看出select的三种机制
1:只有一个case,并且没有default,相当于 <- c0的写法,阻塞读写数据
2:一个case,一个default,就会直接对应channel的非阻塞读写数据
3:有多个case,对应了真正的select多路复用机制,case随机执行,源码位于runtime/select.go
今天我们主要来讨论一下第三种机制
channel详解,相信你一定会有所收获