Retry
![Go Report Card](https://goreportcard.com/badge/github.com/arsham/retry)
This library supports Go >= 1.17
.
Retry
calls your function, and if it errors it calls it again with a delay.
Eventually it returns the last error or nil if one call is successful.
l := &retry.Retry{
Attempts: 666,
Delay: time.Millisecond,
}
err := l.Do(func() error {
return nil
})
You can provide multiple functions:
err := l.Do(func() error {
return nil
}, func() error {
return nil
}}
If you want to stop retrying you can return a special error:
err := l.Do(func() error {
if specialCase {
return &retry.StopError{
Err: errors.New("a special stop"),
}
}
return nil
})
The standard behaviour is to delay the amount you set. You can pass any function
with this signature to change the delay behaviour:
func(attempt int, delay time.Duration) time.Duration
You can also pass the retry.IncrementalDelay
function that would increase the
delay with a jitter to prevent Thundering
herd.
l := &retry.Retry{
Attempts: 666,
Delay: 10 * time.Millisecond,
Method: retry.IncrementalDelay,
}
err := l.Do(func() error {
if specialCase {
return &retry.StopError{
Err: errors.New("a special stop"),
}
}
return nil
})
License
Use of this source code is governed by the Apache 2.0 license. License can be
found in the LICENSE file.