<p>使用 time.Ticker 可实现每5秒打印时间的周期任务,通过 ticker.C 接收信号并用 defer ticker.Stop() 释放资源;每日9点执行任务需计算当前与目标时间差,用 Sleep 等待,若已过则延至次日;复杂调度可选 cron 库,如 "@every 1m" 表示每分钟执行,"0 9 *" 表示每天9点运行,适合灵活定时需求。</p>

想快速实现一个定时执行任务的程序?Golang 提供了 time.Ticker 和 time.Sleep 两种常用方式。下面通过一个简单的项目示例,展示如何用 Golang 实现定时任务,比如每隔几秒打印当前时间,或每天固定时间执行某个操作。
适用于需要每隔固定时间执行一次的任务,比如每 5 秒采集一次日志或上报状态。
package main
<p>import (
"fmt"
"time"
)</p><p>func main() {
ticker := time.NewTicker(5 * time.Second)
defer ticker.Stop() // 防止资源泄露</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">fmt.Println("定时任务已启动...")
for {
<-ticker.C
fmt.Println("执行任务:", time.Now().Format("2006-01-02 15:04:05"))
}}
说明:time.NewTicker 创建一个定时器,每 5 秒触发一次。通过监听 ticker.C 通道接收信号。使用 defer ticker.Stop() 确保程序退出时释放资源。
如果需要每天上午 9:00 执行一次备份操作,可以结合 time.Now 和 time.Sleep 实现。
立即学习“go语言免费学习笔记(深入)”;
package main
<p>import (
"fmt"
"time"
)</p><p>func runDailyTask() {
fmt.Println("开始执行每日任务:", time.Now().Format("2006-01-02 15:04:05"))
// 这里可以写备份、发送邮件等逻辑
}</p><p>func main() {
for {
now := time.Now()
// 设置目标执行时间:今天 9:00
nextRun := time.Date(now.Year(), now.Month(), now.Day(), 9, 0, 0, 0, now.Location())</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;"> // 如果今天 9:00 已过,则设为明天
if now.After(nextRun) {
nextRun = nextRun.Add(24 * time.Hour)
}
// 等待到执行时间
duration := nextRun.Sub(now)
fmt.Printf("下次执行时间: %v,等待 %v\n", nextRun.Format("2006-01-02 15:04:05"), duration)
time.Sleep(duration)
runDailyTask()
}}
说明:通过计算当前时间与目标时间的差值,用 Sleep 等待到执行点。任务执行完后循环继续,自动计算第二天的时间。
如果需要更灵活的调度,比如 “每分钟第 30 秒执行” 或 “每周一上午 10 点”,推荐使用 robfig/cron 库。
go get github.com/robfig/cron/v3
package main
<p>import (
"fmt"
"time"
"github.com/robfig/cron/v3"
)</p><p>func main() {
c := cron.New()</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">// 添加任务:每分钟执行一次
c.AddFunc("@every 1m", func() {
fmt.Println("每分钟任务:", time.Now())
})
// 每天上午 9:00 执行
c.AddFunc("0 9 * * *", func() {
fmt.Println("每天 9:00 执行:", time.Now())
})
c.Start()
defer c.Stop()
// 主程序保持运行
select {}}
说明:cron 使用类 crontab 的语法,非常直观。适合复杂调度场景,但小项目中标准库已足够。
基本上就这些。用 time.Ticker 做周期任务,用时间计算做定点任务,需要复杂规则再引入 cron。不复杂但容易忽略的是时区和 Sleep 精度问题,生产中注意日志和错误处理。
以上就是Golang简单定时任务项目开发示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号