【GoLand】GoLand定时任务 github/robfig/cron/v3 使用与源码解析

Cron 源码阅读

原文链接

robfig/cron/v3是一个 Golang 的定时任务库,支持 cron表达式。Cron 的源码真实教科书级别的存在,真的把低耦合高内聚体现地淋漓尽致,另外其中涉及的装饰器模式,并发处理等都很值得学习。

使用 cron 可以很方便的实现一个定时任务,如下:

go get github.com/robfig/cron/v3@v3.0.0
package main

import "github.com/robfig/cron/v3"

c := cron.New()
// 添加一个任务,每 30s 执行一次
c.AddFunc("30 * * * *", func() {
    fmt.Println("Every hour on the half hour") })
// 开始执行(每个任务会在自己的 goroutine 中执行)
c.Start()

// 允许往正在执行的 cron 中添加任务
c.AddFunc("@daily", func() {
    fmt.Println("Every day") })

// 检查上一个和下一个任务执行的时间
inspect(c.Entries())
..
c.Stop()  // 停止调度,但正在运行的作业不会被停止

通过上面的示例,可以发现, cron 最常用的几个函数:

  • New(): 实例化一个 cron 对象
  • Cron.AddFunc(): 向 Cron 对象中添加一个作业,接受两个参数,第一个是 cron 表达式,第二个是一个无参无返回值的函数(作业)
  • Cron.Stop(): 停止调度,Stop 之后不会再有未执行的作业被唤醒,但已经开始执行的作业不会受影响。

关于 cron 表达式可以先看看 cron表达式的介绍与使用 这篇文章,一个 cron 表达式是一个由 5 个空格分隔的字符串,每一部分从左到右分别表示 秒,分, 时, 天,月, 星期,每个部分由数字和一些特殊字符表示一个约定的时间项,在 robfig/cron 中,每一部分允许的特殊字符如下:

在这里插入图片描述

这些特殊字符的含义如下:

  • *: 匹配该字段所有值,如 0 0 * 1 1 *, 第三个字段为 * 表示(1 月 1 日)每小时。
  • /: 表示范围增量,如 */12 * * * * * 表示每 12 秒执行一次
  • ,: 用来分隔同一组中的项目,如 * * 5,10,15 3,4 * * 表示每个三月或四月的 5, 10, 15 号(3.05, 3.10, 3.15, 4.05, 4.10,4.15
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值