给定以下函数
func jsonBodyReader(config Config, r *http.Request) (io.Reader, error) {
bodyReader := io.LimitReader(r.Body, config.Reports.Max.Body)
// defer r.Body.Close()
gzipReader, err := gzip.NewReader(bodyReader)
if err != nil {
return nil, err
}
// defer gzipReader.Close()
return io.LimitReader(gzipReader, config.Reports.Max.Json), nil
}
Run Code Online (Sandbox Code Playgroud)
r.Body
处理和延迟关闭的最佳方法是什么gzipReader
?
是否真的有必要始终返回所有中间资源/流/读取器才能在父函数中推迟/关闭它们?
另一个例子
func save(target string, reader io.Reader) (io.Reader, *os.File, error) {
file, err := os.Create(target)
if err != nil {
return reader, nil, err
}
/// defer file.Close()
return io.TeeReader(reader, file), file, nil
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我必须返回os.File
才能打电话file.Close()
给家长。 …
go ×1