[解決済み] 繰り返しの作業を間隔をあけて行う方法はありますか?
2022-04-20 20:21:05
質問
Go で反復的なバックグラウンド タスクを実行する方法はありますか? 次のようなものを考えています。
Timer.schedule(task, delay, period)
をJavaで作成しました。 ゴルーチンでできることは知っていますし
Time.sleep()
しかし、私は簡単に停止するものが欲しいです。
これは私が得たものですが、私には醜く見えます。 もっときれいで良い方法はないでしょうか?
func oneWay() {
var f func()
var t *time.Timer
f = func () {
fmt.Println("doing stuff")
t = time.AfterFunc(time.Duration(5) * time.Second, f)
}
t = time.AfterFunc(time.Duration(5) * time.Second, f)
defer t.Stop()
//simulate doing stuff
time.Sleep(time.Minute)
}
解決方法は?
機能
time.NewTicker
は、定期的にメッセージを送信するチャネルを作成し、それを停止する方法を提供します。以下のような感じで使ってみてください(未検証)。
ticker := time.NewTicker(5 * time.Second)
quit := make(chan struct{})
go func() {
for {
select {
case <- ticker.C:
// do stuff
case <- quit:
ticker.Stop()
return
}
}
}()
を閉じるとワーカーを停止することができます。
quit
チャネルを使用します。
close(quit)
.
関連
-
[解決済み] Go: パニック: ランタイム エラー: 無効なメモリ アドレスまたは nil ポインタのデリファレンス
-
[解決済み] キューの実装はありますか?
-
go build error, error can't load package: package xxx is not in GOROOT (D:\basic_tool╱GoGoSrc╱)
-
[解決済み] golangでリーズナブルなスタック実装をお探しですか?
-
[解決済み] Goにforeachループはあるのか?
-
[解決済み] Goでenumを表現する慣用的な方法は何ですか?
-
[解決済み】Goで空の文字列をテストする最良の方法は何ですか?
-
[解決済み】空のスライスを初期化する正しい方法
-
[解決済み】整数の範囲内で反復処理する方法はありますか?
-
[解決済み】Goの構造体にデフォルト値を設定する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】golangでデータ構造をディープコピーする
-
[解決済み] Go モジュールのローカル リポジトリとして Artifactory を使用する方法
-
[解決済み] GORMでレコードを作成・更新するには?
-
[解決済み] GolangパッケージがGOROOTにない(/usr/local/go/src/packageName) [閉じた]。
-
GOROOT に xxx というパッケージがないというエラーが GoLand から報告される
-
[解決済み] Golangで定数mapを宣言するには?
-
[解決済み] 2枚のスライスの等価性を確認する
-
[解決済み] コンソールで標準入力から読み込むにはどうすればよいですか?
-
[解決済み】マップからキーのスライスを取得する