waterd - 实现定时做点什么

未匹配的标注

首先我们先来实现定时做点什么

这里我们采用三方库 github.com/robfig/cron

下载依赖库

go get github.com/robfig/cron/v3

没什么问题的话, 会自动在 go.mod 中新增如下依赖内容

github.com/robfig/cron/v3 v3.0.1 // indirect

然后在代码中导入并使用

import "github.com/robfig/cron/v3"

调整 main.go 内容如下

package main

import (
    "log"

    "github.com/robfig/cron/v3"
)

// main
func main() {
    c := cron.New()
    spec := "* * * * *"
    entryId, err := c.AddFunc(spec, print)
    if err != nil {
        log.Fatalln("cron.AddFunc error:", err.Error())
    }
    log.Println("entryId:", entryId)
    c.Start()
    defer c.Stop()
    select {}
}

// print
func print() {
    log.Println("waterd")
}
  • 这里我们使用三方库 cron 来实例化了一个调度实例 c,
  • 指定了标准的 cron 表达式 spec := "* * * * *" 表示每分钟执行一次 print() 函数,
  • 检查下 c.AddFunc() 函数添加的表达式有木有啥问题
  • Start() 函数启动调度实例
  • defer c.Stop() 在结束整个程序前会停止调度
  • select {} 用于阻塞主协程, 不然程序一运行就结束了,我们就看不到定时执行的效果了

附带一句: linux cron 和 quartz cron 是有区别的, 尤其是在秒级支持上差异很大.

然后我们运行看看

go run main.go

不出意外的话, 输出内容如下:

2030/07/07 22:33:44 entryId: 1
2030/07/07 22:34:00 waterd
2030/07/07 22:35:00 waterd
2030/07/07 22:36:00 waterd
...

来自未来的输出

初始化之后, 每分钟到点执行了一次, 输出了应该打印的内容.

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
taadis
讨论数量: 0
发起讨论 只看当前版本


暂无话题~