Вы ищете функцию httputil.DumpResponse .
Код может быть изменен на что-то похожее на
func CallWithRetries(req *http.Request, output chan []byte) error {
r := retrier.New(retrier.ConstantBackoff(RETRIES, 100*time.Millisecond), nil)
attempt := 0
err := r.Run(func() error {
attempt++
resp, err := Client.Do(req)
if err == nil && resp.StatusCode < 299 {
dump, err := httputil.DumpResponse(resp, true)
if err == nil {
output <- dump
return err
}
return err
} else if err == nil {
customLogger.LogDebug("Status code was: ", transactionId)
err = fmt.Errorf("Status was %v", resp.StatusCode)
}
return err
})
return err
}
Примечания,
Эта версия кода пытается вернуть ошибки заранее и закрыть тело ответа. Это не было проверено, только написано на лету, чтобы использовать с осторожностью.
func CallWithRetries(req *http.Request, output chan []byte) error {
r := retrier.New(retrier.ConstantBackoff(RETRIES, 100*time.Millisecond), nil)
attempt := 0
return r.Run(func() error {
attempt++
var resp *http.Response
{
r, err := Client.Do(req)
if err != nil {
return err
}
defer r.Body.Close()
if resp.StatusCode > 299 {
customLogger.LogDebug("Status code was: ", transactionId)
return fmt.Errorf("Status was %v", resp.StatusCode)
}
resp = r
}
var out []byte
{
x, err := httputil.DumpResponse(resp, true)
if err != nil {
return err
}
out = x
}
output <- out
return nil
})
}