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

想快速实现一个定时执行任务的程序?Golang 提供了 time.Ticker 和 time.Sleep 两种常用方式。下面通过一个简单的项目示例,展示如何用 Golang 实现定时任务,比如每隔几秒打印当前时间,或每天固定时间执行某个操作。
使用 time.Ticker 实现周期性任务
适用于需要每隔固定时间执行一次的任务,比如每 5 秒采集一次日志或上报状态。
package mainimport ("fmt""time")
func main() {ticker := time.NewTicker(5 * time.Second)defer ticker.Stop() // 防止资源泄露
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 mainimport ("fmt""time")
func runDailyTask() {fmt.Println("开始执行每日任务:", time.Now().Format("2006-01-02 15:04:05"))// 这里可以写备份、发送邮件等逻辑}
func main() {for {now := time.Now()// 设置目标执行时间:今天 9:00nextRun := time.Date(now.Year(), now.Month(), now.Day(), 9, 0, 0, 0, now.Location())
// 如果今天 9:00 已过,则设为明天 if now.After(nextRun) { nextRun = nextRun.Add(24 * time.Hour) } // 等待到执行时间 duration := nextRun.Sub(now) fmt.Printf("下次执行时间: %v,等待 %vn", nextRun.Format("2006-01-02 15:04:05"), duration) time.Sleep(duration) runDailyTask()}
}
说明:通过计算当前时间与目标时间的差值,用 Sleep 等待到执行点。任务执行完后循环继续,自动计算第二天的时间。
使用第三方库 cron(可选增强)
如果需要更灵活的调度,比如 “每分钟第 30 秒执行” 或 “每周一上午 10 点”,推荐使用 robfig/cron 库。
go get github.com/robfig/cron/v3
package mainimport ("fmt""time""github.com/robfig/cron/v3")
func main() {c := cron.New()
// 添加任务:每分钟执行一次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简单定时任务项目开发示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1404121.html
微信扫一扫
支付宝扫一扫