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

IT全栈视野
• 阅读 431

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

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

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java目前可以通过以下几种方式进行定时任务
1、单机部署模式Timer:jdk中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行。提供的功能比较单一,无法实现复杂的调度任务。ScheduledExecutorService:也是jdk自带的一个基于线程池设计的定时任务类。其每个调度任务都会分配到线程池中的一个线程执行,所以其任务是并发执行的,互不影响。
Wesley13 Wesley13
3年前
java 定时任务之Timer
java定时任务之TimerTimer是什么?Timer位于java.util包中。官方API的描述是用来控制任务执行的,每个任务可以执行一次,也可以执行多次。在实际应用中,我们可以用它来控制某个任务在特定的时间执行,或者按照某个固定频率或者时间间隔执行。Timer怎么用?它提供了三类方
Wesley13 Wesley13
3年前
Java实现几分钟之后调度任务的定时器
几分钟之后执行某一操作,使用定时器Timer可以实现,Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。具体实现如下:1packagecom.aone.foottalk.common;23importjava
Stella981 Stella981
3年前
Linux的定时任务
任务计划的条件:1.在未来的某个时间点执行一次某个任务(atbatch)2.周期性的执行某个任务(cron)at在指定时间执行任务_用法_at\选项参数\\时间\_选项参数_\l      查看作业\c      显示即将执行任务的细节\d      使用任务id号
Easter79 Easter79
3年前
Synctoy2.1使用定时任务0X1
环境描述:公司需要在windows上面使用双向文件同步,目前发现SyncToy可以实现这个功能,但是在Windows2012上面,添加定时任务的时候,执行状态总是0x1,定时任务配置确认多次,肯定没有问题;同样在windows10上面设置定时任务,就能运行,在google上面查了好多帖子,都是这样,都没有解决,大多数说是windows的bug,可以使用
Stella981 Stella981
3年前
Quartz.Net使用
Quartz.Net使用标签:Quartz.Net在最近工作中,需要在不同时间及不同条件下定时发送通知及消息,最初使用System.Timers.Timer实现。虽然使用简单,随着需要定时处理的任务增多,考虑到System.Timers.Timer如下缺点:Timer没有持久化机制;
Stella981 Stella981
3年前
Golang之waitgroup用法
我敲下一堆代码,终于长出了果实,今天是个伟大日子packagemainimport("fmt""sync""time")/waitgroup在go中,用于线程同步,指等待一个组,等待一个系列执行完成后,才会向下执行/
Stella981 Stella981
3年前
Golang 时间
  golang中涉及到时间的包就是time,包括时间戳、程序休眠、定时器、重复执行的定时器等获取当前时间now:time.Now()//格式化的时间fmt.Printf("%v\n",now)//2018062122:33:57.3519770800CSTm0.000504156
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
IT全栈视野 IT全栈视野
5个月前
在 Go 语言中,实现缓存的多种方式
第1种,使用sync.Map代码示例packagemainimport("fmt""sync""time")funcmain()varcachesync.Map//存储数据到缓存cache.Store("key1","value1")cache.Store
IT全栈视野
IT全栈视野
Lv1
我的微信公众号:IT全栈视野 与你分享更多见闻知识。
文章
13
粉丝
2
获赞
2