robfig/cron 库
使用 cron 语法进行调度
robfig/cron 库 是 CoddyKit 上的免费 Go Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
Go 中的 Cron 表达式
robfig/cron 库让您可以使用熟悉的 cron 语法调度任务,而不必手动编写时间计算。请使用 go get github.com/robfig/cron/v3 安装。
import "github.com/robfig/cron/v3"Cron 语法复习
标准 cron 表达式包含五个字段:
- 分钟(0-59)
- 小时(0-23)
- 月份中的日期(1-31)
- 月份(1-12)
- 星期几(0-6)
示例:0 9 * * 1-5 = 工作日 AM 9:00。
创建调度器
cron.New() 返回一个调度器。您可以添加任务,然后启动它。
c := cron.New()
c.Start()
defer c.Stop()添加任务
AddFunc 注册一个按计划运行的函数;如果计划说明无效,则返回条目 ID 和错误。
id, err := c.AddFunc("30 * * * *", func() {
fmt.Println("runs at minute 30")
})
if err != nil {
log.Fatal(err)
}
_ = id秒字段
robfig/cron v3 默认使用五字段说明(不包含秒)。要启用包含秒的六字段说明,请使用秒选项构建 cron。
c := cron.New(cron.WithSeconds())
c.AddFunc("*/5 * * * * *", func() { fmt.Println("every 5s") })预定义计划
提供了方便的宏:
@hourly@daily@weekly@every 1h30m
c.AddFunc("@every 1h30m", func() { fmt.Println("every 90 min") })
c.AddFunc("@daily", func() { fmt.Println("midnight") })移除作业
使用返回的 EntryID 可以动态移除作业。
id, _ := c.AddFunc("@hourly", task)
// later:
c.Remove(id)作业在协程中运行
每个计划作业都会在自己的协程中运行。如果某个作业可能与下一次触发重叠,请做好并发控制,或使用会跳过重叠运行的包装器。
时区
默认情况下,计划使用计算机的本地时间。传入一个位置以明确指定时区,避免 DST 带来的意外。
loc, _ := time.LoadLocation("America/New_York")
c := cron.New(cron.WithLocation(loc))不运行而进行解析
您可以使用解析器验证规则或计算下一次运行时间,这对测试以及向用户展示下一次执行时间非常有用。
sched, _ := cron.ParseStandard("0 9 * * 1-5")
next := sched.Next(time.Now())
fmt.Println("next run:", next)可运行示例:计算下一次 Cron 运行时间(类比)
robfig/cron 是外部库;这段标准库代码通过计算下一次匹配的时间,模拟最简单的 cron 规则——“每分钟在分钟边界触发”。
package main
import (
"fmt"
"time"
)
func nextRun(from time.Time) time.Time {
return from.Truncate(time.Minute).Add(time.Minute)
}
func main() {
now := time.Date(2026, 1, 1, 8, 15, 30, 0, time.UTC)
fmt.Println("now:", now.Format("15:04:05"))
fmt.Println("next:", nextRun(now).Format("15:04:05"))
}快速检查
测试您对 robfig/cron 库的理解。
回顾
您已经学习了 robfig/cron 库:
cron.New()+AddFunc(spec, fn)+Start()- 默认使用五字段规则;
WithSeconds会添加秒字段 - 使用
@daily和@every等宏简化常见计划 - 使用
Remove、位置和ParseStandard进行控制和测试
常见问题解答
「robfig/cron 库」课时是免费的吗?
是的 — 「robfig/cron 库」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「robfig/cron 库」这节课中我会学到什么?
使用 cron 语法进行调度 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「robfig/cron 库」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 基于时间的调度
- robfig/cron 库
- 用于间隔执行的计时器
- 优雅关闭任务