0Pricing
Go Academy · 课时

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 基于时间的调度
  2. robfig/cron 库
  3. 用于间隔执行的计时器
  4. 优雅关闭任务
← 返回 Go Academy