Golang で正午にコードを実行する
このシナリオでは、ユーザー入力を処理しながら、毎日正午に特定の関数を実行することを目的としています。プログラムの残りの実行。これを効果的に達成するには、いくつかのアプローチがあります。
Interval Timer
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() }
Using timer.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 中国語 Web サイトの他の関連記事を参照してください。