Go实现定时任务


前言

今天工作中,有一个需求是启动一个异步定时任务,下面是Go实现的方式。


Go实现定时任务

  1. 创建了一个时间间隔为5分钟的定时器(Ticker)。time.NewTicker接收一个time.Duration类型的参数,这里设置为5分钟。每当到达这个时间间隔,定时器就会发送一个当前时间的值到关联的通道上。defer ticker.Stop()确保程序退出前会停止定时器,防止资源泄露。
package main

import (
  "fmt"
  "time"
)

func task() {
  // 实现具体的函数逻辑
  fmt.Println("...")
  // ...
}

func init() {
  ticker := time.NewTicker(5 * time.Minute) // 每5分钟执行一次
  
  defer ticker.Stop()  // 确保程序退出前会停止定时器,防止资源泄露。

  for {                //无限循环
    select {		   //多路复用器,从多个channel操作中选择一个执行
    case <-ticker.C:   //这里定义了一个case,监听名为ticker的定时器生成的channel
      task()
    }
  }
}

func main(){
  go init()   // 异步协程
}
  1. 创建一个cron调度器,在新的goroutine中启动cron调度器,确保调度器的Start方法不会阻塞init函数
package main

import (
  "fmt"     
  "time"    
  "github.com/robfig/cron/v3" 
)

func myTask() {
  fmt.Println("通过Cron执行的定时任务") 
}

func init() {
  c := cron.New(cron.WithSeconds()) // 创建一个新的cron调度器,并启用秒级精度

  // 在新的goroutine中启动cron调度器,确保调度器的Start方法不会阻塞init函数
  go func() {
    // 添加一个定时任务,每5秒执行一次myTask函数
    // "*/5 * * * * *": 这是一个cron表达式,用于描述任务的执行频率。
    c.AddFunc("*/5 * * * * *", myTask)
    
    // 启动cron调度器,开始执行已添加的任务
    c.Start()
  }()
}

func main() {
  go init()    // 异步协程
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值