在 Golang 中中午执行代码
在这个场景中,我们的目标是每天中午运行一个特定的函数,同时处理用户输入程序的其余部分执行。有几种方法可以有效地实现这一点:
间隔计时器
Go 中的计时器函数允许我们以预定义的时间间隔执行任务。要安排每天中午执行函数,我们可以使用:
计算时间间隔
要确定当前时间与下一个中午之间的时间间隔,我们首先计算到下一个中午的剩余时间程序开始。然后,我们对后续的中午任务使用 24 小时间隔。
使用 time.Sleep 的示例代码:
package main import "fmt" import "time" func noonTask() { fmt.Println(time.Now()) fmt.Println("do some job.") } func initNoon() { t := time.Now() n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location()) d := n.Sub(t) if d < 0 { n = n.Add(24 * time.Hour) d = n.Sub(t) } for { time.Sleep(d) d = 24 * time.Hour noonTask() } } func main() { initNoon() }
使用计时器.AfterFunc:
package main import ( "fmt" "sync" "time" ) func noonTask() { fmt.Println(time.Now()) fmt.Println("do some job.") timer.AfterFunc(duration(), noonTask) } func main() { timer.AfterFunc(duration(), noonTask) wg.Add(1) // do normal task here wg.Wait() } func duration() time.Duration { t := time.Now() n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location()) if t.After(n) { n = n.Add(24 * time.Hour) } d := n.Sub(t) return d } var wg sync.WaitGroup
额外信息
以上是如何在处理并发用户输入的同时每天中午执行 Go 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!