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