【GoCN酷Go推荐】gocron 定时任务管理器

共 2571字,需浏览 6分钟

 ·

2021-05-24 16:15

简介

很多时候,项目中需要用到定时任务,或者周期任务。首先我们想到了 crontab,但是 crontab 使用会和项目分离,不那么方便。那怎么办呢?

这里,推荐使用gocron 这个库,可以非常方便的设置定时任务,无论年、月、日、时、分、秒的定时设置。同时,它还提供 crontab 字符串格式的设置功能。

快速使用

步骤如下:

安装包"github.com/go-co-op/gocron" 引入包,参照例子直接使用

1.简单使用

  1. 首先,初始化 s 对象;
  2. 然后,直接配置定时任务,任务添加函数名 + 参数;
  3. 最后,block 当前进程,观察任务执行。
package main

import (
    "fmt"
    "time"

    "github.com/go-co-op/gocron"
)

func task(s string){
    fmt.Printf("I'm running, about %s. \n", s)
}

func main() {
    s := gocron.NewScheduler(time.UTC)
    s.Every(1).Seconds().Do(task, "1s")
    s.StartBlocking()
}

输出如下:

I'm running, about 1s. 
I'
m running, about 1s. 
I'm running, about 1s. 

2.更多参考设置

针对定时任务,可以设置 时、分、秒、天、周、几点,也可以 crontab 字符串的格式设置。

package main

import (
    "fmt"
    "time"

    "github.com/go-co-op/gocron"
)

func task(){
    fmt.Printf("I'm running.\n")
}

func main() {
    s := gocron.NewScheduler(time.UTC)

    // 每隔多久
    s.Every(1).Seconds().Do(task)
    s.Every(1).Minutes().Do(task)
    s.Every(1).Hours().Do(task)
    s.Every(1).Days().Do(task)
    s.Every(1).Weeks().Do(task)

    // 每周几
    s.Every(1).Monday().Do(task)
    s.Every(1).Thursday().Do(task)

    // 每天固定时间
    s.Every(1).Days().At("10:30").Do(task)
    s.Every(1).Monday().At("18:30").Do(task)
    s.Every(1).Tuesday().At("18:30:59").Do(task)

    // 设置crontab字符串格式
    s.Cron("*/1 * * * *").Do(task)

    s.StartBlocking()
}

总结


gocron库简单方便,支持方式多样,更多可自行挖掘一下;总之,当需要定时任务时,它会给予你非常大的帮助。


参考资料



  • https://github.com/go-co-op/gocron


还想了解更多吗?

更多请查看:https://github.com/go-co-op/gocron

欢迎加入我们GOLANG中国社区:https://gocn.vip/


《酷Go推荐》招募:


各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到

新的库,并且知道怎么用。


大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名!(报名地址:https://wj.qq.com/s2/7734329/3f51)


扫码也可以加入 GoCN 的大家族哟~


浏览 55
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报