文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

go语言定时器Timer及Ticker怎么使用

2023-06-30 02:45

关注

本文小编为大家详细介绍“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怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯