推荐 Go 语言中的两个定时任务库

共 1211字,需浏览 3分钟

 ·

2021-11-27 04:14

今天给大家介绍两个 Go 语言可以用来做定时任务的库,直接上 demo 就好啦。

 1. robfig/cron

执行如下命令进行安装:

go get -u github.com/robfig/cron

每分钟执行一次:

package main

import (
    "log"

    "github.com/robfig/cron"
)

func main() {
    i := 0
    c := cron.New()
    spec := "0 */1 * * * *"
    c.AddFunc(spec, func() {
        i++
        log.Println("execute per second", i)
    })
    c.Start()
    select {}
}

其中注意select的用法:
golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。

每天上午9点到12点的第2和第10分钟执行:

package main

import (
    "fmt"

    "github.com/robfig/cron"
)

func main() {
    spec := "2,10 9-12 * * *" // 每天上午9点到12点的第2和第10分钟执行
    c := cron.New()
    c.AddFunc(spec, myFunc)
    c.Start()
    select {}
}

func myFunc() {
    fmt.Println("execute")
}

2.  jasonlvhit/gocron

执行如下命令进行安装:

go get -u github.com/jasonlvhit/gocron

每隔1秒执行一个任务,每隔4秒执行另一个任务:

package main

import (
    "fmt"
    "time"

    "github.com/jasonlvhit/gocron"
)

func task() {
    fmt.Println("I am runnning task.", time.Now())
}
func superWang() {
    fmt.Println("I am runnning superWang.", time.Now())
}

func main() {
    s := gocron.NewScheduler()
    s.Every(1).Seconds().Do(task)
    s.Every(4).Seconds().Do(superWang)

    sc := s.Start() // keep the channel
    go test(s, sc)  // wait
    <-sc            // it will happens if the channel is closed
}

func test(s *gocron.Scheduler, sc chan bool) {
    time.Sleep(8 * time.Second)
    s.Remove(task) //remove task
    time.Sleep(8 * time.Second)
    s.Clear()
    fmt.Println("All task removed")
    close(sc) // close the channel
}



   

a2d47f76e651399882b07adbdfa1ffaf.webp
喜欢明哥文章的同学欢迎长按下图订阅!

⬇⬇⬇

浏览 82
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报