本文小编为大家详细介绍“go语言定时器Timer及Ticker怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言定时器Timer及Ticker怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
定时器1-"*/5 * * * * *"
package mainimport ("fmt""github.com/robfig/cron")//主函数func main() {cron2 := cron.New() //创建一个cron实例//执行定时任务(每5秒执行一次)err:= cron2.AddFunc("*/5 * * * * *", print5)if err!=nil{fmt.Println(err)}//启动/关闭cron2.Start()defer cron2.Stop()select {//查询语句,保持程序运行,在这里等同于for{}}}//执行函数func print5() {fmt.Println("每5s执行一次cron")}
设置说明
┌─────────────second 范围 (0 - 60) │ ┌───────────── min (0 - 59) │ │ ┌────────────── hour (0 - 23) │ │ │ ┌─────────────── day of month (1 - 31) │ │ │ │ ┌──────────────── month (1 - 12) │ │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to │ │ │ │ │ │ Saturday) │ │ │ │ │ │ │ │ │ │ │ │ * * * * * *
星号(*) :表示 cron 表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月
斜线(/):表示增长间隔,如第2个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后 每隔 15 分钟执行一次(即 3(3+0*15)、18(3+1*15)、33(3+2*15)、48(3+3*15) 这些时间点执行),这里也可以表示为:3/15
逗号(,):用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行
连字号(-):表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17)
问号(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *
定时器2-Timer-Ticker
Timer //时间到了产生一次事件Ticker //时间到了循环产生事件
Timer-只执行一次
package mainimport ("fmt""time")func main() {//创建一个定时器,设置时间为2s,2s后,往time通道写内容(当前时间)timer := time.NewTimer(2 * time.Second)fmt.Println("当前时间:", time.Now())//2s后,往timer.C写数据,有数据后,就可以读取t := <-timer.C //channel没有数据前后阻塞fmt.Println("t = ", t)}
Ticker-循环执行
package mainimport ("fmt""time")//验证time.NewTimer(),时间到了,只会响应一次func main() {timer := time.NewTicker(1 * time.Second)for {<-timer.Cfmt.Println("时间到")}}
结果:
时间到
时间到
时间到
时间到
Timer延时功能
time.NewTimer(2 * time.Second) //相当于time.Sleep(2 * time.Second)func main() {//延时2s后打印一句话timer := time.NewTimer(2 * time.Second)<-timer.Cfmt.Println("时间到")}func main() {<-time.After(2 * time.Second) //定时2s,阻塞2s, 2s后产生一个事件,往channel写内容fmt.Println("时间到")}
停止和重置定时器
ok := timer.Reset(1 * time.Second) //重新设置为1stimer.Stop() //停止定时器
停止:
func main() {timer := time.NewTimer(3 * time.Second)go func() {<-timer.Cfmt.Println("子协程可以打印了,因为定时器的时间到")}()timer.Stop() //停止定时器for {}}
重置:
func main() {timer := time.NewTimer(3 * time.Second)ok := timer.Reset(1 * time.Second) //重新设置为1sfmt.Println("ok = ", ok)<-timer.Cfmt.Println("时间到")}
定时器Ticker使用
package mainimport ("fmt""time")func main() {ticker := time.NewTicker(1 * time.Second)i := 0for {<-ticker.Ci++fmt.Println("i = ", i)if i == 5 {ticker.Stop()break}}}
读到这里,这篇“go语言定时器Timer及Ticker怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。