For general approach, exponential backoff is a way to avoid banging too hard on an overloaded service; it can reduce how much effort clients spend retrying, and how much worse the retries make the overload. The AWS folks talk about one use case here: http://www.awsarchitectureblog.com/2015/03/backoff.html
I don't know enough to recommend implementations, but there seem to be a few: https://www.google.com/search?q=exponential+backoff+golang
An exp. backoff rule exists in AWS's Go SDK, but doesn't look trivial to extract, e.g. see: https://github.com/awslabs/aws-sdk-go/search?utf8=%E2%9C%93&q=retryrules
Two app-specific things to look out for are 1) don't retry on non-retriable failures like incorrect auth credentials, because then you create needless latency and load redoing something that will fail anyway (discussed at http://docs.aws.amazon.com/general/latest/gr/api-retries.html
), 2) beware of multiple layers of retries (http://blogs.msdn.com/b/oldnewthing/archive/2005/11/07/489807.aspx
), e.g., 3 retries at low, intermediate, and top layers of the stack could yield, whoops, 27 retries.