在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中文網其他相關文章!