robfig/cron/v3
是一个 Golang 的定时任务库,支持 cron 表达式。低耦合高内聚,其中涉及装饰器模式,并发处理等。
package main
import "github.com/robfig/cron/v3"
c := cron.New()
// 添加一个任务,每 30 分钟 执行一次
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 的几个特点:
1)允许在允许中添加或删除 Job:通过 chan 发送信号,select 监听,重新排序。
2)装饰器机制:允许给 Job 添加装饰器,装饰器会在 Entry 初始化时执行。
3)低耦合:New() 时可以传递 Option, 以此可以改变一些默认行为,如可以实现自己的 cron 解释器。
4)每个 Job 使用单独的 goroutine 执行。
5)Stop Cron 不会停止已经开始执行但为执行完的 Job, 可以通过 Context 得知什么时候执行完了。