当我使用golang杜松子酒时,请使用以下命令读取文件数据:
file, fileHeader, err:=ctx.Request.FormFile("blabla...")
我需要写这些吗?
defer file.Close()
?
我跳到源代码,上面写着:
// Open opens and returns the FileHeader's associated File.
func (fh *FileHeader) Open() (File, error) {
if b := fh.content; b != nil {
r := io.NewSectionReader(bytes.NewReader(b), 0, int64(len(b)))
fmt.Printf("TODDLINE:152\n")
fmt.Printf("TODDLINE:154:fmpfile:%#v\n", fh.tmpfile)
fmt.Printf("TODDLINE:154:Filename:%#v\n", fh.Filename)
return sectionReadCloser{r}, nil
}
fmt.Printf("TODDLINE:155\n")
return os.Open(fh.tmpfile)
}
如果它使用os.Open,我想我必须关闭文件,但是如果它重新调整了部分ReadCloser {r},则Close函数显示如下:
func (rc sectionReadCloser) Close() error {
return nil
}
seciontReadCloser的关闭功能不执行任何操作。 而且我发现它确实返回sectionReadCloser {r}。 我想我应该关闭文件,但是我仍然想知道什么时候它将返回os.Open。我将继续阅读源代码并尝试理解它。如果有人给我一些建议会很好。
答案 0 :(得分:6)
如果返回的file
实现了io.Closer
(即,如果它具有Close
方法),除非文档中另有明确说明,否则假定您有责任关闭它。