Go语言中定时任务库Cron使用详解
原创不易,未经允许,请勿转载。
文章目录
- 快速入门
- Cron表达式格式
- 预定义时间表
- 设置时区
- 常用的方法介绍
快速入门
安装cron,注意这里安装的是v3版本。新版本和旧版时间使用有所区别
go get github.com/robfig/cron/v3@v3.0.0
在项目中导入
import "github.com/robfig/cron/v3"
v3版本的github.com/robfig/cron/v3
默认解析器符合Cron 维基百科页面所描述的标准
用法大致如下
package mainimport ("fmt""github.com/robfig/cron/v3"
)func main() {c := cron.New()c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })c.AddFunc("30 3-6,20-23 * * *", func() { fmt.Println(".. in the range 3-6am, 8-11pm") })c.AddFunc("CRON_TZ=Asia/Tokyo 30 04 * * *", func() { fmt.Println("Runs at 04:30 Tokyo time every day") })c.AddFunc("@hourly", func() { fmt.Println("Every hour, starting an hour from now") })c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty, starting an hour thirty from now") })c.Start()select {}
}
Cron表达式格式
一个 cron 表达式表示一组时间,使用 5 个空格分隔的字段。这是v3版本默认支持的格式。
Field name | Mandatory? | Allowed values | Allowed special characters
---------- | ---------- | -------------- | --------------------------
Minutes | Yes | 0-59 | * / , -
Hours | Yes | 0-23 | * / , -
Day of month | Yes | 1-31 | * / , - ?
Month | Yes | 1-12 or JAN-DEC | * / , -
Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
如果要想在v3版本中也支持秒级别的解析,需要自定义解析器。代码如下
Field name | Mandatory? | Allowed values | Allowed special characters
---------- | ---------- | -------------- | --------------------------
Seconds | Yes | 0-59 | * / , -
Minutes | Yes | 0-59 | * / , -
Hours | Yes | 0-23 | * / , -
Day of month | Yes | 1-31 | * / , - ?
Month | Yes | 1-12 or JAN-DEC | * / , -
Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
func main() {// Seconds field, required
cron.New(cron.WithSeconds())// Seconds field, optional
cron.New(cron.WithParser(cron.NewParser(cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))
}
预定义时间表
可以用@yearly
、@monthly
、@weekly
、@weekly
、@daily
、@hourly
来替代cron表达式。分别表示每年,每月、每星期、每天、每小时。
还可以用@every <duartion>
来表示间隔时间,即间隔<duration>
执行一次任务。<duration>
只要可以被time.ParseDuration()
解析即可
设置时区
func main() {cron.New(cron.WithLocation(time.UTC))
}
常用的方法介绍
New()
package mainimport ("fmt""github.com/robfig/cron/v3"
)func main() {// 创建一个默认的cron对象c := cron.New()// 自定义解析器cron.New(cron.WithSeconds())// Seconds field, optionalcron.New(cron.WithParser(cron.NewParser(cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,)))select {}
}
AddJob()
// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个Job
func (c *Cron) AddJob(spec string, cmd Job) (EntryID, error)// Job是一个接口,有一个Run方法
type Job interface {Run()
}
自定义个一个func类型,实现Run方法。不过一般可以直接用下面讲的AddFunc
方法即可
package mainimport ("fmt""github.com/robfig/cron/v3"
)type MyJob func()func (f MyJob) Run() {fmt.Println("myJob")
}func main() {c := cron.New()c.AddJob("@every 1s", MyJob(func() {fmt.Println("myjob")}))c.Start()select {}
}
AddFunc()
// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个传入一个函数,就是要执行的任务
// 会返回一个Id和error
// 会把传入的cmd func转成FuncJob。FuncJob实现了Job接口
func (c *Cron) AddFunc(spec string, cmd func()) (EntryID, error) {return c.AddJob(spec, FuncJob(cmd))
}
package mainimport ("fmt""github.com/robfig/cron/v3"
)func main() {c := cron.New()Id, err := c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })// Id可以用做取消任务c.Remove(Id)select {}
}
Start()
调用start方法开始执行任务
func main() {c := cron.New()c.AddJob("@every 1s", MyJob(func() {fmt.Println("myjob")}))c.AddFunc()c.Start()select {}
}
如果这篇文章对您有所帮助,麻烦点个一键三连。
原创不易,未经允许,请勿转载。
博客主页:https://xiaojujiang.blog.csdn.net/
Go语言中定时任务库Cron使用详解相关推荐
- c语言二级证题库及详解答案,全国计算机等级考试二级C语言上机题库及其答案详解...
全国计算机等级考试二级C语言上机题库及其答案详解 全国计算机二级C语言上机考试题第一套给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积( 注: 圆面积公式为:2 ...
- c语言二级指针有什么作用,C语言中二级指针的实例详解
C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...
- C语言中三个数比较大小详解——三种方法
C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...
- c语言自定义color,forecolor c语言中的颜色设置语句详解
backcolor与forecolor的区别 backcolor:用来设置图像的背景颜色,也用来设置文档.表格.图像等的背景颜色. forecolor:用来设置图像的前景颜色,也用来设置文档.表格.图 ...
- c语言结构体成员变量私有化,C语言中结构体变量私有化详解
C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...
- c语言输入循环语句,C语言中输入输出和循环语句详解.ppt
C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...
- python中requests库的用途-数据爬虫(三):python中requests库使用方法详解
有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错,如下 使用 Requests 模块,上传文件也是如此简单的,文件的类型会自动进行处理: 因为12306有一个错误证书,我们那它的网 ...
- python类初始化导入库_Python中optparser库用法实例详解
本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常 ...
- c语言中双冒号意思_详解C++中的双冒号 ::
C++中的双冒号 ::第一种,类作用域,用来标明类的变量.函数 Human::setName(char* name); 第二种,命名空间作用域,用来注明所使用的类.函数属于哪一个命名空间的 std:: ...
最新文章
- 神经架构搜索在视频理解中研究进展的综述
- 【pytorch】torch.mean的使用
- 入门十大Python机器学习算法(附代码)
- java加载c库阻塞_【死磕Java並發】-----J.U.C之阻塞隊列:DelayQueue
- 数据结构与算法 / 队列(queue)
- java lstm_人人都能看懂的LSTM介绍及反向传播算法推导(非常详细)
- mysql数据库group by_MySQL数据库对GROUP BY子句的功能扩展(1)
- wpf label字体为斜体_2020年趋势:20款流行字体大预测
- vue中动态指令参数
- DeepStream参数配置之sink
- python 代码运行时间获取方式
- 数学建模分享part2--主成分分析(spss)
- fc安卓模拟器_MAME街机模拟器0.224经典游戏全收藏
- 动画插件--WOWJS
- 闰月c语言函数,中国农历闰月怎么闰 一般都是哪几个月?
- html——注释(单行注释 多行注释)
- Runtime Error! R6025-pure virtual function call 问题怎么解决
- 高德地图开发踩坑记录
- 【科研学术】Typora之markdown公式,汇总,看这一篇就够了~
- EXCEL 技能——等行分页