Golang: cron の実装 / 特定の時間にタスクを実行する 質問する

Golang: cron の実装 / 特定の時間にタスクを実行する 質問する

Go で特定の時間にタスクを実行できる関数を実装する方法の例を探していましたが、何も見つかりませんでした。

私は自分で実装し、それを回答で共有しています。これにより、他の人が独自の実装の参考にすることができます。

ベストアンサー1

これは一般的な実装であり、以下を設定できます。

  • 間隔期間
  • 刻む時間
  • 刻むまでの時間
  • 2番目に刻む

更新しました:(メモリリークは修正されました)

import (
"fmt"
"time"
)

const INTERVAL_PERIOD time.Duration = 24 * time.Hour

const HOUR_TO_TICK int = 23
const MINUTE_TO_TICK int = 00
const SECOND_TO_TICK int = 03

type jobTicker struct {
    timer *time.Timer
}

func runningRoutine() {
    jobTicker := &jobTicker{}
    jobTicker.updateTimer()
    for {
        <-jobTicker.timer.C
        fmt.Println(time.Now(), "- just ticked")
        jobTicker.updateTimer()
    }
}

func (t *jobTicker) updateTimer() {
    nextTick := time.Date(time.Now().Year(), time.Now().Month(), 
    time.Now().Day(), HOUR_TO_TICK, MINUTE_TO_TICK, SECOND_TO_TICK, 0, time.Local)
    if !nextTick.After(time.Now()) {
        nextTick = nextTick.Add(INTERVAL_PERIOD)
    }
    fmt.Println(nextTick, "- next tick")
    diff := nextTick.Sub(time.Now())
    if t.timer == nil {
        t.timer = time.NewTimer(diff)
    } else {
        t.timer.Reset(diff)
    }
}

おすすめ記事