For transient failures, retry with backoff:
var err error
for i := 0; i < 3; i++ {
err = doRequest()
if err == nil {
break
}
time.Sleep(time.Second * time.Duration(i+1))
}
if err != nil {
return fmt.Errorf("after 3 attempts: %w", err)
}
Increase delay between retries. Set a maximum number of attempts.