ホームページ  >  記事  >  バックエンド開発  >  同時ユーザー入力を処理しながら毎日正午に Go 関数を実行するにはどうすればよいですか?

同時ユーザー入力を処理しながら毎日正午に Go 関数を実行するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-21 06:23:09996ブラウズ

How to Execute a Go Function Daily at Noon While Handling Concurrent User Input?

Golang で正午にコードを実行する

このシナリオでは、ユーザー入力を処理しながら、毎日正午に特定の関数を実行することを目的としています。プログラムの残りの実行。これを効果的に達成するには、いくつかのアプローチがあります。

Interval Timer

Go のタイマー関数を使用すると、事前定義された間隔でタスクを実行できます。毎日正午に関数をスケジュールするには、次を使用できます。

  • timer.AfterFunc(): 指定された期間の後に関数を実行します。
  • time.Tick(): 指定された時刻に現在時刻を送信するチャネルを返します。 interval.
  • time.Sleep(): 指定された期間プログラムを一時停止します。
  • time.Ticker: timer.Tick( と同様) ) ですが、指定された間隔で現在の時刻を送信し、送信するたびにリセットするチャネルを提供します。

間隔の計算

現在時刻と次の正午の間の間隔を決定するには、まず最初の正午までの残り時間を計算します。プログラムが始まります。次に、後続の正午のタスクには 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

追加情報

  • [Github: Gocron](https://github.com/jasonlvhit/gocron) は、Go でジョブをスケジュールするためのユーティリティ ライブラリを提供します。
  • [Golang -特定のタイミングで関数を実行する方法回](https://tutorialedge.net/golang/golang-execute-function- specific-times/)
  • [Golang: cron の実装 / 特定の時間にタスクを実行する](https://blog .logrocket.com/how-to-implement-a-cron-in-golang/)

以上が同時ユーザー入力を処理しながら毎日正午に Go 関数を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。