我的 API 需要解析传入的请求。第一步,需要通过包的Go的ReadAll()函数读取数据ioutil。为什么会出现错误?在官方文档不给一个暗示,因为这种错误的原因没有说明。func ParseRequest(w http.ResponseWriter, r *http.Request) { body, err := ioutil.ReadAll(r.Body) if err != nil { // handle the error }}
2 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
如果客户端确实发送了无效的 JSON,则是客户端的错误:400 Bad Request
。
如果 JSON 有效但服务器代码包含错误,则服务器故障: 500 Internal Server error
.
达令说
TA贡献1821条经验 获得超6个赞
ioutil.ReadAll
可能由于多种原因而失败。它能够读取任何io.Reader
,而不仅仅是 HTTP 请求正文。并且Request.Body
只是一个io.ReadCloser
. 生成一个与网络套接字以外的东西相关联的东西对我来说是完全合法的(我一直对 http 做这些事情来构建代理和隧道协议)。
很明显,许多类型的io.Reader
事件都可能有错误(例如,您可能无法访问文件,或者磁盘可能在读取过程中途被卸载)。特定于 HTTP,您可能类似地预期网络故障错误。如果网络套接字在读取请求正文的中途收到 RST 数据包,您会期望发生什么?
但最终,您应该带走的一点是您必须处理错误,因为Reader
接口可能会产生错误。不要假设该接口是如何实现的。
- 2 回答
- 0 关注
- 209 浏览
添加回答
举报
0/150
提交
取消