【GO】タイムアウトや定期実行処理


golangで定期処理などを書きたくなったのでどうやって書くか考えます。

とりあえずtimeパッケージかcontextパッケージあたりを使うと良さそうなので2つとも使ってみます。

timeパッケージ使用

goroutineとtimeパッケージで割と簡単に書くことができました。

mainの後半は「Ctrl+C」などで終了するのを待っている処理です。

タイムアウトはSleepで処理を待っていて、インターバルは無限ループ内でTikerの受信を待っています。

contextパッケージ使用

インターバル処理のキャンセルなどしたい場合はcontextパッケージを使います。

使ったことがなかったのでこちらこちらを参考にしました。

この場合mainselectdefaultを指定していないため待機状態になっています。

“_ctx end!”の方が表示されていませんが、これは子のコンテキストがスリープ中に親が終了して、伝播する前に全体の処理が終わってしまったためです。

ちょっとごちゃごちゃして取っ付きにくいですが、思ったよりシンプルな動きみたいで使いやすそうです。


コメントを残す

メールアドレスが公開されることはありません。