请参阅此处的示例https://pkg.go.dev/net/http#example-Get。下面也有截图:
func main() {
res, err := http.Get("http://www.google.com/robots.txt")
if err != nil {
log.Fatal(err)
}
body, err := io.ReadAll(res.Body)
res.Body.Close() // Why!?
if res.StatusCode > 299 {
log.Fatalf("Response failed with status code: %d and\nbody: %s\n", res.StatusCode, body)
}
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", body)
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么我需要关闭res.Body.Close()第7行。我没有打开它。我在如果我不关闭response.Body会发生什么?中看到了解释。我明白文档是这么说的。
有没有更好的方法来解决这个问题?
我认为这违反了开闭原则。我认为如果 ReadAll 打开了 steam,它应该将其关闭。Go 中通常是这样完成这些事情的吗?
go ×1