Go语言 cron/v3
定时任务调度库使用笔记
1. 安装依赖
要使用 cron/v3
定时任务库,首先需要安装该库:
go get github.com/robfig/cron/v3
2. Cron 定时任务基本用法
- 创建 Cron 调度器:使用
cron.New()
创建一个新的 Cron 调度器。 - 添加任务:使用
c.AddJob()
添加定时任务,任务的执行间隔可以使用 Cron 表达式(如@every 60s
表示每 60 秒执行一次)。 - 启动调度器:使用
c.Start()
启动定时任务调度器。
3. 任务类型和实现 cron.Job
接口
为了将任务添加到调度器,任务必须实现 cron.Job
接口。该接口非常简单,只有一个方法 Run()
,所有定时任务的执行逻辑都放在 Run()
方法内。
type Job interface {
Run()
}
4. 示例:使用结构体作为任务
我们可以定义一个结构体,像 UsdtRateJob
,并实现 Run()
方法来执行任务的具体逻辑。将结构体实例作为任务添加到 Cron 调度器中。
代码示例:
package main
import (
"fmt"
"log"
"github.com/robfig/cron/v3"
)
// 定义一个任务结构体 UsdtRateJob
type UsdtRateJob struct{}
// 实现 cron.Job 接口的 Run 方法
func (j UsdtRateJob) Run() {
// 执行任务的具体逻辑
fmt.Println("执行汇率监听任务...")
// 可以在此处添加 API 查询等操作
}
func main() {
// 创建一个新的 Cron 调度器
c := cron.New()
// 每 60 秒执行一次 UsdtRateJob 任务
_, err := c.AddJob("@every 60s", UsdtRateJob{})
if err != nil {
log.Fatal(err)
}
// 启动 Cron 调度器
c.Start()
// 保持主程序运行,确保任务执行
select {}
}
5. 详细解释
UsdtRateJob{}
:
这是创建一个UsdtRateJob
类型的实例(一个结构体)。此结构体实现了cron.Job
接口的Run()
方法。c.AddJob("@every 60s", UsdtRateJob{})
:
该方法将UsdtRateJob
任务添加到调度器中,并设定任务每 60 秒执行一次。Run()
方法:
任务的具体执行逻辑必须放在Run()
方法中。这个方法会在每次定时触发时调用。c.Start()
:
启动 Cron 调度器,开始按照设定的时间间隔执行任务。select {}
:
由于 Go 是基于并发的,select {}
会使主程序保持运行,确保定时任务能够继续执行。
6. Cron 表达式
Cron 表达式用于定义任务的执行时间。常见的几种表达式:
@every 60s
:每 60 秒执行一次任务。@every 1h
:每小时执行一次。@every 30m
:每 30 分钟执行一次。@every 1d
:每天执行一次。
7. 总结
cron/v3
是一个强大的 Go 定时任务库,可以通过 Cron 表达式灵活地调度任务。- 创建自定义的任务结构体并实现
Run()
方法是核心,任务可以根据需要执行不同的逻辑。 - 使用
c.AddJob()
添加任务,c.Start()
启动 Cron 调度器,然后通过select {}
保持程序运行。
这样,您可以方便地在 Go 中实现各种定时任务调度功能。