方法1 gocron
使用gocron库
go get -u github.com/go-co-op/gocron
用法举例:
timezone, _ := time.LoadLocation("Asia/Shanghai")
s := gocron.NewScheduler(timezone)
s.Every(5).Seconds().Do(func(){ ... })
s.Every("5m").Do(func(){ ... })
s.Every(5).Days().Do(fu
s.Every(1).Month(1, 2, 3).Do(func(){ ... })
s.Every(1).Day().At("10:30").Do(func(){ ... })
s.Every(1).Day().At("10:30;08:00").Do(func(){ ... })
s.Every(1).Day().At("10:30").At("08:00").Do(func(){ ... })
s.Every(1).MonthLastDay().Do(func(){ ... })
s.Every(2).MonthLastDay().Do(func(){ ... })
s.Cron("*/1 * * * *").Do(task)
s.StartAsync()
s.StartBlocking()
使用如下:
timezone, _ := time.LoadLocation("Asia/Shanghai")
s := gocron.NewScheduler(timezone)
// 每2秒执行一次
s.Every(2).Seconds().Do(func() {
go schedule1()
})
// 每4秒执行一次
s.Every(4).Second().Do(func() {
go schedule2()
})
s.StartBlocking()
方法2 time.Timer
新建一个time.Timer,在定时的时间到了之后t.C会有值传入,然后执行任务代码,重置定时器
//设置定时任务的时间
t := time.NewTimer(2 * time.Second)
defer t.Stop()
for {
<-t.C
fmt.Println("do something")
t.Reset(2 * time.Second)
}
方法3 time.Ticker
Ticker是一个周期性的定时器,下面代码会每隔2秒输出"do something"
//设置定时任务的时间
ticker := time.NewTicker(2 * time.Second)
defer ticker.Stop()
for range ticker.C {
fmt.Println("do something")
}