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
...
来自未来的输出
初始化之后, 每分钟到点执行了一次, 输出了应该打印的内容.