Когда я использую golang gin, считываю данные файла, используя:
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, я полагаю, что должен закрыть файл, но если он перезапускает sectionReadCloser {r}, функция Close будет выглядеть следующим образом:
func (rc sectionReadCloser) Close() error {
return nil
}
Функция закрытия seciontReadCloser ничего не делает.
И я обнаружил, что он возвращает sectionReadCloser {r}.
Я думаю, мне следует закрыть файл, но я все еще хочу знать, когда он вернет os.Open. Я буду продолжать читать исходный код и пытаться понять его. Было бы хорошо, если бы кто-нибудь дал мне совет.