最佳答案
我正在开发一个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)
在我的情况下,当处理实现io.Reader
的HTTP响应时,第二个版本似乎需要更少的代码,但由于我已经看到了这两个版本,我想知道是否有任何偏好,我是否应该使用一个解决方案而不是另一个。
此外,这个问题的公认答案说
请使用
json.Decoder
代替json.Unmarshal
。
但没有提到原因。我真的应该避免使用json.Unmarshal
吗?