网站首页 > 博客文章 正文
在 Go 语言中,github.com/robfig/cron/v3 是一个流行的定时任务调度库,支持 Cron 表达式,可以方便地执行定时任务。以下是 github.com/robfig/cron/v3 的详细使用教程,包含代码示例和说明。
1. 安装 cron 库
首先,使用以下命令安装 cron/v3:
go get -u github.com/robfig/cron/v3
2. 基本用法
2.1 创建调度器
使用 cron.New() 创建一个调度器。
2.2 添加定时任务
使用 c.AddFunc() 添加定时任务,传入 Cron 表达式和要执行的函数。
2.3 启动调度器
调用 c.Start() 启动调度器。
示例代码
package main
import (
"fmt"
"time"
"github.com/robfig/cron/v3"
)
func main() {
// 1. 创建调度器
c := cron.New()
// 2. 添加定时任务
c.AddFunc("* * * * *", func() { // 每分钟执行一次
fmt.Println("Task executed at:", time.Now())
})
// 3. 启动调度器
c.Start()
// 防止主程序退出
select {}
}
输出
Task executed at: 2023-10-01 12:00:00
Task executed at: 2023-10-01 12:01:00
3. Cron 表达式
Cron 表达式用于定义任务的执行时间,格式为:
秒 分 时 日 月 周
示例
表达式 | 说明 |
0 * * * * * | 每分钟的第 0 秒执行 |
0 0 * * * * | 每小时的 0 分 0 秒执行 |
0 0 12 * * * | 每天中午 12 点执行 |
0 0 8 * * 1 | 每周一 8 点执行 |
0 0 0 1 * * | 每月 1 日的 0 点执行 |
4. 添加任务选项
可以通过 c.AddJob() 添加任务选项,支持自定义任务。
示例
type MyJob struct{}
func (j MyJob) Run() {
fmt.Println("Custom job executed at:", time.Now())
}
func main() {
c := cron.New()
// 添加自定义任务
c.AddJob("*/2 * * * * *", MyJob{}) // 每 2 秒执行一次
c.Start()
select {}
}
5. 任务日志
可以通过 cron.WithLogger() 配置日志输出。
示例
func main() {
logger := cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))
c := cron.New(cron.WithLogger(logger))
c.AddFunc("* * * * * *", func() { // 每秒执行一次
fmt.Println("Task executed at:", time.Now())
})
c.Start()
select {}
}
6. 停止调度器
可以使用 c.Stop() 停止调度器。
示例
func main() {
c := cron.New()
c.AddFunc("* * * * * *", func() {
fmt.Println("Task executed at:", time.Now())
})
c.Start()
// 10 秒后停止调度器
time.Sleep(10 * time.Second)
c.Stop()
fmt.Println("Cron stopped")
}
7. 移除任务
可以通过 c.Remove() 移除任务。
示例
func main() {
c := cron.New()
// 添加任务并保存 ID
id, _ := c.AddFunc("* * * * * *", func() {
fmt.Println("Task executed at:", time.Now())
})
c.Start()
// 5 秒后移除任务
time.Sleep(5 * time.Second)
c.Remove(id)
fmt.Println("Task removed")
// 防止主程序退出
select {}
}
8. 完整示例
以下是一个完整示例,包含任务调度、日志和停止功能:
package main
import (
"fmt"
"log"
"os"
"time"
"github.com/robfig/cron/v3"
)
func main() {
// 配置日志
logger := cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))
c := cron.New(cron.WithLogger(logger))
// 添加定时任务
id, _ := c.AddFunc("* * * * * *", func() { // 每秒执行一次
fmt.Println("Task executed at:", time.Now())
})
// 启动调度器
c.Start()
// 5 秒后移除任务
time.Sleep(5 * time.Second)
c.Remove(id)
fmt.Println("Task removed")
// 10 秒后停止调度器
time.Sleep(10 * time.Second)
c.Stop()
fmt.Println("Cron stopped")
}
9. 总结
- github.com/robfig/cron/v3 是一个强大的定时任务调度库,支持 Cron 表达式和自定义任务。
- 可以通过日志、任务移除和停止调度器等功能实现灵活的调度管理。
- 适用于需要定期执行任务的场景,如数据备份、定时通知等。
猜你喜欢
- 2025-03-17 Golang defer的使用(go语言中defer)
- 2025-03-17 golang使用logrus生成日志(golang gc日志)
- 2025-03-17 在Golang中使用日志模块(golang 日志处理)
- 2025-03-17 golang性能优化实践(golang 性能优化)
- 2025-03-17 Golang的日志库(go日志框架)
- 2025-03-17 超干货:Golang 简洁架构实战(golang技巧)
- 2025-03-17 每日一库之 logrus 日志使用教程(log日志怎么打开)
- 2025-03-17 Golang:将日志以Json格式输出到Kafka
- 2025-03-17 运维大神如何使用 Golang 日志监控应用程序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)