Golang定时器的使用
这篇文章介绍两种golang中常用的定时器使用方法,一种是常用的cron定时任务,另一种则是time包中的几种类型,前者是第三方开源,因此需要import "github.com/robfig/cron"
。至于原理,留待以后研究补充。
Cron定时任务
robfig/cron已在github上收获8.9k个star,目前已发布V3版本,显而易见,它是一个非常好用且功能强大的定时任务库,与原生的golang中的Timer不同的是,它使用任务表达式来定时。
1 | import( |
显然,使用起来非常简单。
关于定时表达式,表达式(* * * * * *)中的六个字段从左到右为:秒,分,时,天,月,星期。说明如下:
字段 | 取值范围 | 特殊字符 |
---|---|---|
秒 | 0-59 | * / , - ? |
分 | 0-59 | * / , - ? |
时 | 0-23 | * / , - ? |
日 | 1-31 | * / , - ? |
月 | 1-12或JAN-DEC | * / , - ? |
星期 | 0-6或SUN-SAT | * / , - ? |
特殊字符使用规则:
字符 | 字符作用 | 举例 | 含义 |
---|---|---|---|
* | 与该字段所有值匹配 | 0 30 * * * * * | 每小时的30分0秒执行一次 |
/ | 定义范围的增量 | */5 * * * * * | 每五秒执行一次 |
, | 分隔多个时间 | MON,WED,FRI | 每周一,周三,周五执行 |
- | 定义范围 | * * * * 1-3 * * | 从一月到三月的每个月 |
? | 只用于字段“日”和“星期” | 0 0 23 * * ? | 每天23点执行一次 |
更加详细的官方说明参见文档。
Timer对象
Timer是一种特殊的计时器,首先在程序中使用time.NewTimer()方法指定时间,在程序运行中到达该时间后,就将当前时间发送到其C字段中。
它主要用在异步编程中处理操作超时行为,在C字段读到Time实例前,所有等待的协程都会被阻止。
虽然功能不如corn,但它的使用方式也很简单:
1 | func main(){ |
定时到期后,还可使用Reset()方法再次启用,或者Stop()结束定时。
time.Ticker方法
一般用来作为时间周期执行任务,使用也很简单:
1 | func main(){ |
与Timer对象不同的是,Ticker在时间到期后会自动续期,不用Reset()。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CC's Zone!
评论