2017-03-24 29 views
0

Golangで特定の時間にタスクを設定する必要があります。たとえば、ジョブの終了時間があるので、テーブルの行をいくつか変更する必要があります。私はそれを探しましたが、私はCronで定期的な仕事しか見つけることができませんでした。私は5分ごとにデータベースをチェックするためにcronを設定したくありません。特定の時間だけ関数を実行するGolang

jasonlvhitはGolang上のcronのためのgocronという名前のライブラリを持っているが、私はそれは私の問題に役立つことだろうとは思いません。

は解決:

@ JimBさんのコメントの後、私は、時間のライブラリとtime.AfterFunc関数のドキュメントは、この問題を解決するために私を助けることができます確認しました。 FUNC機能は非常にナノ秒しなければならない期間を要した後、あなたが閉鎖でそれを呼び出すことができますprintSomething関数を定義する場合は、()

time.AfterFunc(nanoSecondToSecond(10), func() { 
    printSometing("Mert") 
}) 

をnanoSecondsToSecondのようなものを作成する場合には便利でしょう。

func printSometing(s string) { 
    fmt.Println("Timer " + s) 
} 
+3

と一緒にしばしばなぜだけではなく、使用[ 'time.Timer'](https://golang.org/pkg/time/#Timer)、または[' time.AfterFunc'] (https://golang.org/pkg/time/#AfterFunc)? – JimB

+0

私はAfterFunc関数を見ていません、ごめんなさい。私は事例を編集しました。 –

+2

持続時間定数: '10 * time.Second'を使うか、特定の時刻を望むなら' t.Sub(time.Now()) 'を使います。 – JimB

答えて

1

あなたはこのようなものを試すことができます。私はそれがそれ自身のゴールルーチンに置かれ、非ブロッキングであり、追加コードがその下で実行できるようにします。サーバー

ticker := time.NewTicker(5 * time.Minute) 
go func(ticker *time.Ticker) { 
    for { 
    select { 
     case <-ticker.C: 
     // do something every 5 minutes as define by the ticker above 
     } 
    } 
}(ticker) 
関連する問題