原创不易,未经允许,请勿转载。

文章目录

  • 快速入门
  • 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使用详解相关推荐

  1. c语言二级证题库及详解答案,全国计算机等级考试二级C语言上机题库及其答案详解...

    全国计算机等级考试二级C语言上机题库及其答案详解 全国计算机二级C语言上机考试题第一套给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积( 注: 圆面积公式为:2 ...

  2. c语言二级指针有什么作用,C语言中二级指针的实例详解

    C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...

  3. C语言中三个数比较大小详解——三种方法

    ​ C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...

  4. c语言自定义color,forecolor c语言中的颜色设置语句详解

    backcolor与forecolor的区别 backcolor:用来设置图像的背景颜色,也用来设置文档.表格.图像等的背景颜色. forecolor:用来设置图像的前景颜色,也用来设置文档.表格.图 ...

  5. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  6. c语言输入循环语句,C语言中输入输出和循环语句详解.ppt

    C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...

  7. python中requests库的用途-数据爬虫(三):python中requests库使用方法详解

    有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错,如下 使用 Requests 模块,上传文件也是如此简单的,文件的类型会自动进行处理: 因为12306有一个错误证书,我们那它的网 ...

  8. python类初始化导入库_Python中optparser库用法实例详解

    本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常 ...

  9. c语言中双冒号意思_详解C++中的双冒号 ::

    C++中的双冒号 ::第一种,类作用域,用来标明类的变量.函数 Human::setName(char* name); 第二种,命名空间作用域,用来注明所使用的类.函数属于哪一个命名空间的 std:: ...

最新文章

  1. 神经架构搜索在视频理解中研究进展的综述
  2. 【pytorch】torch.mean的使用
  3. 入门十大Python机器学习算法(附代码)
  4. java加载c库阻塞_【死磕Java並發】-----J.U.C之阻塞隊列:DelayQueue
  5. 数据结构与算法 / 队列(queue)
  6. java lstm_人人都能看懂的LSTM介绍及反向传播算法推导(非常详细)
  7. mysql数据库group by_MySQL数据库对GROUP BY子句的功能扩展(1)
  8. wpf label字体为斜体_2020年趋势:20款流行字体大预测
  9. vue中动态指令参数
  10. DeepStream参数配置之sink
  11. python 代码运行时间获取方式
  12. 数学建模分享part2--主成分分析(spss)
  13. fc安卓模拟器_MAME街机模拟器0.224经典游戏全收藏
  14. 动画插件--WOWJS
  15. 闰月c语言函数,中国农历闰月怎么闰 一般都是哪几个月?
  16. html——注释(单行注释 多行注释)
  17. Runtime Error! R6025-pure virtual function call 问题怎么解决
  18. 高德地图开发踩坑记录
  19. 【科研学术】Typora之markdown公式,汇总,看这一篇就够了~
  20. EXCEL 技能——等行分页

热门文章

  1. 解决 操作必须使用一个可更新的查询的错误
  2. macOS和Linux下source和export命令
  3. 骚操作!程序员埋下每隔几年就触发的逻辑炸弹
  4. Linux 设置 时区
  5. 11月24号-11月30号
  6. Markdown出题模板(YZOJ-)
  7. 欧洲斯托克 50 指数
  8. Android 表情功能的完整处理方案
  9. 自己感觉这个是最经典的FLASH~
  10. Windows10聚焦背景纯灰色