首页  

go select 与 定时器     所属分类 go 浏览量 68
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 并发递增计数实例