go语言定时器Timer及Ticker怎么使用
go语言定时器Timer及Ticker怎么使用
本文小编为大家详细介绍“go语言定时器Timer及Ticker怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言定时器Timer及Ticker怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
定时器1-"*/5 * * * * *"
packagemainimport("fmt""github.com/robfig/cron")//主函数funcmain(){cron2:=cron.New()//创建一个cron实例//执行定时任务(每5秒执行一次)err:=cron2.AddFunc("*/5*****",print5)iferr!=nil{fmt.Println(err)}//启动/关闭cron2.Start()defercron2.Stop()select{//查询语句,保持程序运行,在这里等同于for{}}}//执行函数funcprint5(){fmt.Println("每5s执行一次cron")}
设置说明
┌─────────────second范围(0-60)│┌─────────────min(0-59)││┌──────────────hour(0-23)│││┌───────────────dayofmonth(1-31)││││┌────────────────month(1-12)│││││┌─────────────────dayofweek(0-6)(0to6areSundayto││││││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-只执行一次
packagemainimport("fmt""time")funcmain(){//创建一个定时器,设置时间为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-循环执行
packagemainimport("fmt""time")//验证time.NewTimer(),时间到了,只会响应一次funcmain(){timer:=time.NewTicker(1*time.Second)for{<-timer.Cfmt.Println("时间到")}}
结果:
时间到
时间到
时间到
时间到
Timer延时功能
time.NewTimer(2*time.Second)//相当于time.Sleep(2*time.Second)funcmain(){//延时2s后打印一句话timer:=time.NewTimer(2*time.Second)<-timer.Cfmt.Println("时间到")}funcmain(){<-time.After(2*time.Second)//定时2s,阻塞2s,2s后产生一个事件,往channel写内容fmt.Println("时间到")}
停止和重置定时器
ok:=timer.Reset(1*time.Second)//重新设置为1stimer.Stop()//停止定时器
停止:
funcmain(){timer:=time.NewTimer(3*time.Second)gofunc(){<-timer.Cfmt.Println("子协程可以打印了,因为定时器的时间到")}()timer.Stop()//停止定时器for{}}
重置:
funcmain(){timer:=time.NewTimer(3*time.Second)ok:=timer.Reset(1*time.Second)//重新设置为1sfmt.Println("ok=",ok)<-timer.Cfmt.Println("时间到")}
定时器Ticker使用
packagemainimport("fmt""time")funcmain(){ticker:=time.NewTicker(1*time.Second)i:=0for{<-ticker.Ci++fmt.Println("i=",i)ifi==5{ticker.Stop()break}}}
读到这里,这篇“go语言定时器Timer及Ticker怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
go如何实现职责链模式
-
Go Callvis如何使用
-
go pprof如何使用
-
Go框架三件套Gorm、Kitex、Hertz怎么使用
-
Go语言单元测试和基准测试实例代码分析
-
go Realize怎么使用
goRealize怎么使用本文小编为大家详细介绍“goReal...
-
14天学会Go语言第四天:Array Map Slice 数组 和切片
-
如何从 PHP 过渡到 Golang?
我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗...
-
零经验Go语言MVC框架,并推荐PHP函数库和MySQL表自动转struct
最近搭建k8s系统,为了调试自动部署用Go做了个MVC框架,这是个适用于喜欢Go语言练习的框架,零Go语言经验学习Go;配合Go模...
-
从php到Golang系统的演变