関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
私自身は結構よく利用しているパターンです。forループとtime.Beforeを組み合わせます。
「5秒間◯◯をする」のような処理書くときに使っています。
サンプル
#
package times import ( "context" "math" "sync" "time" ) // DoNDurations は、forループとtime.Now().Before()を組み合わせて「Nの時間分何かを行う」という処理のサンプルです。 func DoNDurations() error { var ( ctx = context.Background() wg = sync.WaitGroup{} d = 3 * time.Second ) wg.Add(1) go func(ctx context.Context, d time.Duration) { defer wg.Done() // 指定された時間分、何かする var ( end = time.Now().Add(d) ) for time.Now().Before(end) { // 何か処理したことにする。 for i := range 1000000 { _ = math.Sqrt(float64(i * i)) } select { case <-ctx.Done(): return default: } } }(ctx, d) wg.Wait() return nil }
shell
実行すると以下のように出力されます。
$ task task: [build] go build -o "/workspace/try-golang/try-golang" . task: [run] ./try-golang -onetime ENTER EXAMPLE NAME: time_do_n_duration [Name] "time_do_n_duration" [Elapsed] 3.00047569s
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。





