为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Go 不能正确读取请求?

为什么 Go 不能正确读取请求?

Go
犯罪嫌疑人X 2021-10-04 15:45:23
我的 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.


查看完整回答
反对 回复 2021-10-04
?
达令说

TA贡献1821条经验 获得超6个赞

ioutil.ReadAll可能由于多种原因而失败。它能够读取任何io.Reader,而不仅仅是 HTTP 请求正文。并且Request.Body只是一个io.ReadCloser. 生成一个与网络套接字以外的东西相关联的东西对我来说是完全合法的(我一直对 http 做这些事情来构建代理和隧道协议)。

很明显,许多类型的io.Reader事件都可能有错误(例如,您可能无法访问文件,或者磁盘可能在读取过程中途被卸载)。特定于 HTTP,您可能类似地预期网络故障错误。如果网络套接字在读取请求正文的中途收到 RST 数据包,您会期望发生什么?

但最终,您应该带走的一点是您必须处理错误,因为Reader接口可能会产生错误。不要假设该接口是如何实现的。


查看完整回答
反对 回复 2021-10-04
  • 2 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信