使用默认时间 Golang 调用 func



My func start .然后在 2 分钟后再次运行。凌晨3点如何再次运行? 我用户时间。蜱

func doEvery(d time.Duration, f func(time.Time)) {
for x := range time.Tick(d) {
f(x)
}
}
func RunUpdateTimeTable(respond chan<- string) {
respond <- "Start get timetables info service."
updateTimeTables(time.Now())
doEvery(2*time.Minute, updateTimeTables)
}

这里是

func doAtEvery3am(f func(time.Time)) {
for {
// compute duration until 3am local time
t := time.Now()
t = time.Date(t.Year(), t.Month(), t.Day(), 3, 0, 0, 0, time.Local)
d := time.Until(t)
if d <= 0 {
d = time.Until(t.Add(24*time.Hour))
}
// wait duration and call f
f(<-time.After(d))
}
}

注意:我们在执行f后将持续时间重新计算为凌晨 3 点,因为f的执行持续时间未知。

不是一个很好的解决方案,但有效。

func doEveryDay(h int, f func(time.Time)) {
now := time.Now()
if now.Hour() > h {
now.Add(time.Hour * 24)
}
d := time.Millisecond * 900
for tick := range time.Tick(d) {
if now.Day() == tick.Day() && tick.Hour() == h && tick.Minute() == 0 && tick.Second() == 0 {
f(tick)
now.Add(time.Hour * 24)
}
}
}

最新更新