【发布时间】:2018-10-21 08:14:21
【问题描述】:
我见过几个例子,你从r.Body 读取,然后在之后执行延迟r.Body.Close()。如果我们不关闭它会发生什么?
假设我有一个http.Handler,我在其中解码 r.Body 的内容,如下所示:
func createFeedback(w http.ResponseWriter, r *http.Request) {
// ... Some code ...
f := feedback.New()
if err := json.NewDecoder(r.Body).Decode(f); err != nil {
return err
}
defer r.Body.Close()
// ... Some more code ...
}
为什么我们必须关闭r.Body?
【问题讨论】:
-
这看起来不像是重复的。另一个 SO 帖子是关于关闭响应正文的。这个问题是关于请求正文的。
-
由于官方文档 (pkg.go.dev/net/http?tab=doc#Request) 适用,您不必这样做。服务器会自己做。我强烈同意@discoverAnkit。这不是重复的
-
这是因为是io.Writer,需要关闭。
标签: go