Go言語で一定時間待機する方法

Go言語で一定時間待機する方法

Go言語で一定時間待機するためには、標準ライブラリに含まれるtimeパッケージを使用します。
このパッケージは時間の操作に関するさまざまな機能を提供しており、待機処理を実装する際にも非常に便利です。

待機処理を行うために最も一般的に使用される関数はtime.Sleepです。
time.Sleep関数は、指定した時間だけ処理を一時停止させることができます。
具体的には、time.Duration型の値を引数に取ります。
このtime.Duration型は、ナノ秒、マイクロ秒、ミリ秒、秒、分、時間などの時間単位を指定するためのものです。

以下に、time.Sleepを使用して一定時間待機する方法を示します。

package main

import (
  "fmt"
  "time"
)

func main() {
  fmt.Println("開始")

  // 2秒待機する
  time.Sleep(2 * time.Second)

  fmt.Println("2秒後")
}

上記のコードでは、time.Sleep(2 * time.Second)によって、2秒間の待機を行っています。
time.Secondは、1秒を表すtime.Duration型の値であり、これに2を掛けることで2秒間の待機が実現されます。
time.Sleep関数が呼ばれると、指定された時間が経過するまでプログラムの実行が一時停止します。

また、待機時間を変数で指定したい場合には、以下のように変数を使って柔軟に対応することができます。

package main

import (
  "fmt"
  "time"
)

func main() {
  fmt.Println("開始")

  waitTime := 5 * time.Second
  time.Sleep(waitTime)

  fmt.Println("5秒後")
}

このコードでは、waitTimeという変数に待機時間を指定し、その変数をtime.Sleepに渡しています。
これにより、待機時間を簡単に変更することができ、より柔軟なプログラムが実現できます。

time.Sleepは、簡単な待機処理には非常に便利ですが、タイマーのような複雑なスケジューリングが必要な場合には、time.Timerやtime.Afterといった他の機能も利用できます。
例えば、time.After関数を使うと、指定した時間が経過した後にチャネルを通じて通知を受け取ることができます。

以下に、time.Afterを使用した例を示します。

package main

import (
  "fmt"
  "time"
)

func main() {
  fmt.Println("開始")

  // 3秒後にチャネルに通知が送られる
  <-time.After(3 * time.Second)

  fmt.Println("3秒後")
}

このコードでは、time.After関数が3秒後にチャネルに値を送信し、そのチャネルを受け取ることでプログラムが3秒待機します。
この方法では、待機中に他の処理を行うことができるため、より高度な制御が可能です。

これらの方法を使って、Go言語での待機処理を適切に実装することができます。
time.Sleepはシンプルで直感的に使えるため、多くのケースで重宝するでしょうが、状況に応じてtime.Timerやtime.Afterも検討すると良いでしょう。