download:Go 微服务入门到容器化实际,落地可观测的微服务电商我的项目内附文档源码
解析 Golang 定时工作库 gron 设计和原理
简略说,每一个位都代表了一个工夫维度,* 代表选集,所以,下面的语义是:在每天早上的 4 点 05 分触发工作。
但 cron 毕竟只是一个操作系统级别的工具,如果定时工作失败了,或者压根没启动,cron 是没法提醒开发者这一点的。并且,cron 和 正则表达式都有一种魔力,不知道大家是否感同身受,这里引用共事的一句名言:
这世界上有些语言非常相似: shell 脚本, es 查问的那个 dsl 语言, 定时工作的 crontab, 正则表达式. 他们相似就相似在每次要写的时候基本都得从新现学一遍。
刚巧,最近看到了 gron 这个开源我的项目,它是用 Golang 实现一个并发安全的定时工作库。实现非常简略精美,代码量也不多。明天咱们就来一起拆散源码看一下,怎么基于 Golang 的能力做进去一个【定时工作库】。
Gron provides a clear syntax for writing and deploying cron jobs.
gron 是一个泰国小哥在 2016 年开源的作品,它的个性就在于非常简略和清晰的语义来定义【定时工作】,你不必再去记 cron 的语法。咱们来看下作为使用者怎么上手。
首先,咱们还是一个 go get 安装依赖:
$ go get github.com/roylee0704/gron
复制代码
假设咱们期望在【时机】到了当前,要做的工作是打印一个字符串,每一个小时执行一次,咱们就可能这样:
package main
import (
"fmt"
"time"
"github.com/roylee0704/gron"
)
func main() {
c := gron.New()
c.AddFunc(gron.Every(1*time.Hour), func() {fmt.Println("runs every hour.")
})
c.Start()
}