Я пытаюсь найти способ выяснить причину ошибки при JSON-декодировании http.Response.Body
if err := json.NewDecoder(resp.Body).Decode(&lResp); err != nil {
// Get the cause of err
}
Тип err
(и errors.Cause(err)
с использованием либо github.com/pkg/errors
, либо github.com/friendsofgo/errors
) равно *errors.errorString
.
Итак, что я могу сделать прямо сейчас, это полная противоположность проверки типа ошибки, а именно:
if strings.HasSuffix(cause.Error(), "(Client.Timeout exceeded while reading body)") {
//...
}
Я могу попытатьсяиспользуйте ioutil.ReadAll()
, и тогда я получу *http.httpError
в качестве ошибки при истечении времени ожидания.
Основная причина в том, что я не хочу получать частично читаемую структуру JSONв ошибке - только причина ошибки и с текущим способом, это делается (ошибка возвращается) я получаю:
main.ListingResponse.DataSources: struct CustomType{ /* partially read JSON struct ... */ }.net/http: request canceled (Client.Timeout exceeded while reading body)