golang 实现定时器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package util

import (
	"log"
	"time"
)

//golang 定时器,启动的时候执行一次,以后每天晚上12点执行
func StartTimer(f func()) {
	go func() {
		for {
			//系统启动10秒后 开始执行 迁移任务
			time.Sleep(time.Second*10)
			log.Printf("开始执行 mysql数据迁移clickhouse任务 %+v\n", (time.Now()))
			f()
			now := time.Now()
			// 计算下一个零点
			next := now.Add(time.Hour * 24)
			next = time.Date(next.Year(), next.Month(), next.Day(), 0, 0, 0, 0, next.Location())
			t := time.NewTimer(next.Sub(now))
			<-t.C
		}
	}()
}