多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## select 用法 golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。  在执行select语句的时候,运行时系统会自上而下地判断每个case中的发送或接收操作是否可以被立即执行(立即执行:意思是当前Goroutine不会因此操作而被阻塞) select的用法与switch非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。与switch语句可以选择任何可使用相等比较的条件相比,select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作。 ```go     ch1 := make(chan int, 1)     ch2 := make(chan int, 1)     ch1 <- 1     select {     case e1 := <-ch1:         //如果ch1通道成功读取数据,则执行该case处理语句         fmt.Printf("1th case is selected. e1=%v", e1)     case e2 := <-ch2:         //如果ch2通道成功读取数据,则执行该case处理语句         fmt.Printf("2th case is selected. e2=%v", e2)     default:         //如果上面case都没有成功,则进入default处理流程         fmt.Println("default!.")     } ``` ## go 定时器: ```go func main() { tickTimer := time.NewTicker(1 * time.Second) barTimer := time.NewTicker(60 * time.Second) for { select { case <-tickTimer.C: fmt.Println("tick") case <-barTimer.C: fmt.Println("bar") } } } ```