在 Go 语言中,使用多种方式实现定时任务 2年前

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)
    }
}

在定时任务的执行函数中,根据业务可以添加开关状态决定是否执行任务。

给个关注,下期继续分享干货。

织素
今宵酒醒何处?杨柳岸,晓风残月。
2
发布数
1
关注者
1367
累计阅读

热门教程文档

10.x
88小节
Typescript
31小节
Docker
62小节
React
18小节
Vue
25小节
广告