-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46561
- shell命令
-
- 文章:(42)篇
- 阅读:154228
- Git教程
-
- 文章:(36)篇
- 阅读:234845
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131788
-
Golang定时器timer和ticker2019-05-22 21:20 阅读(14409) 评论(0)
一、简介
ticker和timer,都是go语言中的定时器。ticker是指每间隔多次时间执行一次,反复执行。timer 是到固定时间后,执行一次。
如果对JavaScript比较了解的话,可以类比JavaScript中的 setInterval()和setTimeout()函数,就能够很容易理解ticker和timer。1、类型的定义
timer和ticker都是结构体类型,结构体中包含时间类型的无缓存通道,当定时器被触发的时候,会向该通道中传入当前时间。
Timer类型定义如下:
type Timer struct { C <-chan Time r runtimeTimer }
Ticker类型定义如下:
type Ticker struct { C <-chan Time // The channel on which the ticks are delivered. r runtimeTimer }
通过,查看timer和ticker类型定义,我们就可以很清楚的理解,ticker和timer定时器的原理,无非就是利用了无缓存通道的阻塞功能而已。
二、案例
1、timer定时器的使用
package main import ( "time" "fmt" ) func main() { // 使用NewTimer 创建一个 Timer,它会在2 * time.Second时间后,向其自身的 t1.C 字段发送当时的时间 t1 := time.NewTimer(2 * time.Second) fmt.Println("当前时间" + time.Now().Format("2006-01-02 15:04:05")) // 从通道读取时间,会阻塞 fmt.Println("触发时间" + (<-t1.C).Format("2006-01-02 15:04:05")) }
2、ticker定时器的使用
package main import ( "time" "fmt" ) func main() { // 使用NewTimer 创建一个 Timer,它会在2 * time.Second时间后,向其自身的 t1.C 字段发送当时的时间 t1 := time.NewTicker(2 * time.Second) fmt.Println("当前时间" + time.Now().Format("2006-01-02 15:04:05")) triggerTimes := 1 for { triggerTime:= <- t1.C // 从通道读取时间,会阻塞 str ,_:= fmt.Printf("第%d次触发,触发时间%s", triggerTimes, triggerTime.Format("2006-01-02 15:04:05")) fmt.Println(str) triggerTimes ++ } }