Golang Cron定时任务
在Golang中如何使用cron库实现定时任务?想每隔5分钟执行一次特定的函数,但不太清楚具体的写法。比如如何设置cron表达式,是否需要考虑并发安全,以及如何优雅地停止定时任务?最好能提供一个完整的示例代码。
2 回复
Golang中可使用github.com/robfig/cron/v3库实现定时任务。支持cron表达式,精确到秒级调度。示例:
c := cron.New()
c.AddFunc("*/5 * * * *", func() {
fmt.Println("每5分钟执行")
})
c.Start()
适用于后台任务、定时清理等场景。
更多关于Golang Cron定时任务的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中,你可以使用github.com/robfig/cron/v3库来创建和管理Cron定时任务。这是一个功能强大且广泛使用的库,支持标准Cron表达式。
安装
go get github.com/robfig/cron/v3
基本用法
package main
import (
"fmt"
"log"
"time"
"github.com/robfig/cron/v3"
)
func main() {
// 创建cron实例(默认本地时区)
c := cron.New()
// 添加定时任务
// 每分钟执行一次
_, err := c.AddFunc("* * * * *", func() {
fmt.Printf("任务执行时间: %v\n", time.Now().Format("2006-01-02 15:04:05"))
})
if err != nil {
log.Fatal("添加任务失败:", err)
}
// 每5秒执行一次(使用@every语法)
_, err = c.AddFunc("@every 5s", func() {
fmt.Println("每5秒执行的任务")
})
if err != nil {
log.Fatal("添加任务失败:", err)
}
// 启动cron调度器
c.Start()
// 让程序运行一段时间(实际使用时可能需要其他方式保持运行)
time.Sleep(5 * time.Minute)
// 停止调度器(优雅关闭)
c.Stop()
}
Cron表达式格式
标准格式:分 时 日 月 周
* * * * *- 每分钟0 * * * *- 每小时0 0 * * *- 每天午夜0 9 * * 1- 每周一9:00
预定义调度
@every 1h30m- 每1小时30分钟@yearly/@annually- 每年@monthly- 每月@weekly- 每周@daily/@midnight- 每天@hourly- 每小时
带参数的任务函数
func myTask(name string) {
fmt.Printf("任务 %s 执行时间: %v\n", name, time.Now())
}
func main() {
c := cron.New()
// 使用cron.NewChain添加中间件(如恢复panic)
_, err := c.AddFunc("@every 1m", func() {
myTask("示例任务")
})
c.Start()
defer c.Stop()
// 保持程序运行
select {}
}
注意事项
- 使用
cron.New(cron.WithSeconds())可支持秒级精度 - 调用
c.Stop()会等待正在执行的任务完成 - 考虑使用
cron.WithLogger()添加日志记录 - 在生产环境中,建议添加恢复机制防止panic
这个库简单易用,适合大多数定时任务场景。

