code: func IsRetriableError(err error) bool {
  	if e, ok := err.(interface {
  		RetriableError() bool
  	}); ok {
  		return e.RetriableError()
  	}
  	if cause, ok := Cause(err).(*url.Error); ok {
  		return cause.Temporary() || cause.Timeout()
  	}
  	if parent := parentOf(err); parent != nil {
  		return IsRetriableError(parent)
  	}
  	return false
  }
docs: // IsRetriableError indicates the low level transfer had an error but the
  // caller may retry the operation.