go select 与 定时器
所属分类 go
浏览量 879
go select 源于网络IO模型中的select,本质上也是IO多路复用
基于channel而不是网络
监听 IO 操作,当 IO 操作发生时,触发相应的动作
go select 特点
每个case语句里必须是一个IO操作,面向channel的IO操作
如果有多个case都可以运行,随机执行一个 ,其他不会执行 ,否则执行default子句(如果有)
如果没有default子句,select将阻塞
select {
case communication clause1 :
// ...
case communication clause2 :
// ...
case communication clauseN :
// 可选
default :
// ...
}
selectdemo.go
package main
import (
"fmt"
)
func main() {
ch1 := make(chan int, 1)
ch2 := make(chan int, 1)
ch1 <- 1
select {
case value := <-ch1:
fmt.Printf("ch1.value=%v", value)
case value := <-ch2:
fmt.Printf("ch1.value=%v", value)
default:
fmt.Println("default!.")
}
}
定时器
package main
import (
"fmt"
"time"
)
func main() {
timer1 := time.NewTicker(1 * time.Second)
timer2 := time.NewTicker(3 * time.Second)
for {
select {
case <-timer1.C:
fmt.Println("timer1",time.Now())
case <-timer2.C:
fmt.Println("timer2",time.Now())
}
}
}
上一篇
下一篇
Mybatis常用工具类
MySQL jdbc ResultSet
key忽略大小写的TreeMap
go类型转换和断言
学习GO要了解的几个特性
GO 并发递增计数实例