同步或者异步执行定时任务
package main
import (
"github.com/go-co-op/gocron"
"log"
"time"
)
func main() {
// 初始化
s := gocron.NewScheduler(time.Local) // 使用系统的本地时区
//s:=gocron.NewScheduler(time.UTC) // 使用UTC时区
log.Println("start")
// 示例一:每2秒钟执行一次
s.Every(2).Seconds().Do(func() {
log.Println("执行了。。。。2s")
})
// 示例二:WaitForSchedule() 的使用
// 默认情况下会立即执行一次,使用 WaitForSchedule() 可禁止这种情况,等到下次才执行
s.Every(5).Seconds().Do(func() {
log.Println("啦啦啦111")
})
s.Every(5).Seconds().WaitForSchedule().Do(func() {
log.Println("啦啦啦222")
})
// 示例三:通过 crontab表达式来执行
// 标准的crontab格式,最小单位是分
s.Cron("*/1 * * * *").Do(task)
// 最小单位是秒的crontab表达式
s.CronWithSeconds("*/1 * * * * *").Do(task)
// 示例四:指定时间运行
s.Every(1).Sunday().At("00:30").Do(task)
s.Every(1).Day().At("10:00").Do(task)
// 示例五:SingletonMode() 单例模式
// 如果之前的任务尚未完成,单例模式将阻止新任务启动
s.Every("2").Seconds().SingletonMode().Do(task)
// 示例六:带有参数的任务
s.Every(1).Seconds().Do(taskWithParams, 2, "test")
// 异步启动
s.StartAsync()
// 同步启动,阻塞进程
s.StartBlocking()
}
func task() {
log.Println("hello")
}
func taskWithParams(a int, b string) {
log.Println(a, b)
}