Я разрабатываю клиент API, где мне нужно кодировать полезную нагрузку JSON по запросу и декодировать тело JSON из ответа.
Я прочитал исходный код из нескольких библиотек и из того, что я видел, у меня есть в основном две возможности для кодирования и декодирования строки JSON.
Используйте json.Unmarshal
, передавая всю строку ответа
data, err := ioutil.ReadAll(resp.Body)
if err == nil && data != nil {
err = json.Unmarshal(data, value)
}
или используя json.NewDecoder.Decode
err = json.NewDecoder(resp.Body).Decode(value)
В моем случае, когда вы имеете дело с ответами HTTP, которые реализуют io.Reader
, второй версии, по-видимому, требуется меньше кода, но поскольку я видел, как мне интересно, есть ли предпочтение, следует ли использовать решение, а не другой.
Более того, принятый ответ из этого вопроса говорит
Используйте
json.Decoder
вместоjson.Unmarshal
.
но он не упоминал причины. Должен ли я действительно избегать использования json.Unmarshal
?