cron v3和cron v1的定时器示例:

1)以下适用于cron v3的写法:

安装依赖:go get github.com/robfig/cron/v3

import (
	"github.com/robfig/cron/v3"
	"log"
)

核心代码:

在你的函数里加入如下代码:

go func() {

	// timeout示例,写法v1的相同:
	// 每12s运行一次:"@every 12s" 或 "*/12 * * * * *"
	// 每分钟的第0s执行一次:"0 */1 * * * *"

	num := 0 // 运行次数
	// 设置时区
	local, _ := time.LoadLocation("Asia/Shanghai")
	interval := cron.New(cron.WithLocation(local), cron.WithSeconds()) // 设置时区并且精度按秒。
	timeout := "0 */1 * * * *"
	intervalId, err := interval.AddFunc(timeout, func() {
		num++
		log.Println("全局定时器已开启=num=", num)

	})
	if err != nil{
		log.Println("全局定时器报错", "\n error=", err, "\n num=", num)
		return
	}
	log.Println("全局定时器已开启,Id=", intervalId)
	interval.Start()

	//关闭着计划任务, 但是不能关闭已经在执行中的任务.
	//defer interval.Stop()
	//select{} // 阻塞主线程而不退出

}()

打印日志:

2021/05/22 11:04:00 全局定时器已开启=num= 1
2021/05/22 11:05:00 全局定时器已开启=num= 2
2021/05/22 11:06:00 全局定时器已开启=num= 3

-

2)以下适用于cron v1的写法:

安装依赖:go get github.com/robfig/cron

import (
	"github.com/robfig/cron"
	"log"
)

核心代码:

在你的函数里加入如下代码:

go func() {

	// cron-v1时间写法示例timeout := "秒 分 时 日 月 年"
	// 每分钟的第5s、25s、45s各执行一次:5,25,45 * * * * *
	// 每12s执行一次:*/12 * * * * *
	// 每隔1分钟的第0秒执行一次:0 */1 * * * *
	// 每天23:30:00执行一次:0 30 23 * * *
	// 每天凌晨1:00:00执行一次:0 0 1 * * *
	// 每月1号早上6:00:00执行一次:0 0 6 1 * *
	// 在每小时的26分、29分、33分各执行一次:0 26,29,33 * * *
	// 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * *
    // 每天十点到十二点每五秒执行一次:*/5 * 10-12 * * *

	num := 0 // 运行次数

	interval := cron.New()
	timeout := "*/12 * * * * *"
	error := interval.AddFunc(timeout, func() {
		num++
		log.Println("全局定时器已开启=num=", num)

	})
	log.Println("全局定时器运行结果,error=", error)
	interval.Start()

}()

打印日志:

2021/05/22 10:46:12 全局定时器已开启=num= 1
2021/05/22 10:46:24 全局定时器已开启=num= 2
2021/05/22 10:46:36 全局定时器已开启=num= 3
2021/05/22 10:46:48 全局定时器已开启=num= 4
2021/05/22 10:47:00 全局定时器已开启=num= 5
2021/05/22 10:47:12 全局定时器已开启=num= 6

-