1.使用 time 包的 After 和 Ticker 功能
1package main 2 3import ( 4 "fmt" 5 "time" 6) 7 8func main() { 9 // 单次定时任务 10 timer := time.After(5 * time.Second) 11 <-timer 12 fmt.Println("5 秒后执行的单次定时任务") 13 14 // 周期性定时任务 15 ticker := time.NewTicker(2 * time.Second) 16 defer ticker.Stop() 17 18 for range ticker.C { 19 fmt.Println("每 2 秒执行一次的周期性定时任务") 20 } 21}
2.使用第三方库 github.com/robfig/cron
1package main 2 3import ( 4 "fmt" 5 "github.com/gin-gonic/gin" 6 "github.com/robfig/cron" 7) 8 9// InitCron 初始化并启动定时任务 10func InitCron() { 11 c := cron.New() 12 13 // 每分钟的第 30 秒执行 14 c.AddFunc("30 * * * * *", func() { 15 fmt.Println("每分钟的第 30 秒执行") 16 }) 17 18 // 每 5 分钟执行 19 c.AddFunc("*/5 * * * *", func() { 20 fmt.Println("每 5 分钟执行") 21 }) 22 23 c.Start() 24} 25 26func main() { 27 r := gin.Default() 28 29 // 请求验证码的路由 30 r.GET("/getCode", func(c *gin.Context) { 31 // 此处编写生成和返回验证码的逻辑 32 c.JSON(200, gin.H{"message": "验证码已生成并返回"}) 33 }) 34 35 InitCron() 36 37 // 启动服务器,监听 8080 端口 38 if err := r.Run(":8080"); err!= nil { 39 fmt.Println("服务器启动失败:", err) 40 } 41}
在定时任务的执行函数中,根据业务可以添加开关状态决定是否执行任务。
给个关注,下期继续分享干货。
