在 golang 中若写定时脚本,有两种实现。
一、基于原生语法组装
func DocSyncTaskCronJob() {
ticker := time.NewTicker(time.Minute * 1) // 每分钟执行一次
for range ticker.C {
ProcTask()
}
}
func ProcTask() {
log.Println("hello world")
}
二、基于 github 中封装的 cron 库实现
package task
import (
"github.com/robfig/cron/v3"
"log"
)
// Task 任务
type Task struct {
}
var taskMap = make(map[string]func())
func init() {
taskMap["procTask"] = ProcTask
}
func ProcTask() {
log.Println("hello world")
}
// Init 初始化
func Init() (obj *Task) {
obj = &Task{}
return
}
// Execute 执行任务
func (obj *Task) Execute() {
crontabList := make(map[string]string)
// 每分钟执行一次
// https://crontab.guru/ 检测 crontab 准确率
crontabList["procTask"] = "0 */1 * * * *"
c := cron.New(cron.WithSeconds())
log.Println(crontabList)
for key, value := range crontabList {
if _, ok := taskMap[key]; ok {
_, err := c.AddFunc(value, taskMap[key])
if err != nil {
log.Println("Execute task AddFunc Failed, err=" + err.Error())
}
}
}
go c.Start()
defer c.Stop()
}