作用:
- 检测channel是否准备完毕,可读或可写
- select语句运行期间,goroutine是阻塞,空select可以当睡眠用
slect 语句最重要的是case语句的结构
type case struct{
c *hchan // channel主要结构
kind uint16
elem unsafe.Pointer
}
-
字段解释:
- c是channel的主要数据结构,一个case只能操作一个channel
- kind 表示case的类型,读、写、defalut类型
- elem根据kind的不同,有不同意义
- kind是读的时候,elem表示读出channel的数据地址
- kind是写的时候,表示将要写入channel的数据的地址
-
selct过程
- select会监听所有case的channel读写操作
- 如果case的channel可以完成这个case的读写操作,就根据case索引完成相应操作
- 如果所有case的channel操作都不可以,就会执行default
- 如果没有defaul,就会阻塞所在协程