わたし、諦めない! - golangの場合
Perlの世界には、Sub::Retryという便利なリトライモジュールがあるのですが、それをgolangに移植した。API投げるのに失敗したときにリトライしてほしいとかそういうのがあるわけです。mackerel-agentで使ってます。
https://github.com/Songmu/retry
Synopsisまんまですが、以下のように使う。
err := retry.Retry(3, 1*time.Second, func() error {
// たまにコケるような処理
})
if err != nil {
// error handling
}
こういうリトライ制御に関しては、golangの場合、指数バックオフをちゃんと実装してある https://github.com/cenkalti/backoff というのがあり、これがよくできているのですが、これを使うまでもないかなーという感じだったのでとりあえずこういう簡単なやつを書いてみた次第。