Go
golang

Exponential Backoffの例 最大リトライ回数の指定アリ

外部への接続するような処理の場合単にリトライするのではなくExponential Backoffを使った方が良いのですが、go言語にも既にライブラリとして公開してくださってる方がいました。
https://github.com/cenkalti/backoff

無限にリトライするのはあんまり現実的じゃないので、最大リトライ回数を設定したいところですが、以下のようにやればOKです。
適当に中の数字を変更して試してみて下さい


package main

import (
    "fmt"
    "github.com/cenkalti/backoff"
)

func main() {

    i := 0
    operation := func() error {
        i += 1
        fmt.Printf("i: %v\n", i)
        if i < 7 {
            return fmt.Errorf("%v is less than 7", i)
        } else {
            fmt.Printf("DONE\n")
            return nil
        }
    }

    b := backoff.WithMaxTries(backoff.NewExponentialBackOff(), 4)
    err := backoff.Retry(operation, b)
    if err != nil {
        fmt.Printf("ERROR!: %v\n", err)
        return
    }
}