func OpenFile()에서 gzip 파일과 bzip2 파일을 읽길 원합니다. 나중에 다른 유형을 추가 할 것입니다.파일을 열고 다른 기능에서 NewReader를 만든 후 파일을 닫는 방법?
func OpenFile(name string) io.Reader{
file, err := os.Open(name)
if err != nil {
log.Fatal(err)
}
if(strings.Contains(name, ".gz")){
gzip, gerr := gzip.NewReader(file)
if gerr != nil {
log.Fatal(gerr)
}
return gzip
}else if(strings.Contains(name, ".bz2")){
bzip2 := bzip2.NewReader(file)
return bzip2
}else{
return file
}
}
내가 다른 기능 A에서()는 OpenFile 전화 :
in := OpenFile(p)
for _, d := range fdb.Detect(in) {
set[d] = true
counter++
}
...
내 문제는 내가 사용하는 경우 "file.Close()를 연기"이다 OpenFile()에서 파일이 폐쇄 될 것이다 너무 일찍 그래서 나는 어떤 입력 값을 얻을 수 없습니다. A에서 파일을 닫으려면 어떻게해야합니까?
gzip.NewReader (file) 및 bzip2.NewReader (file)는 다른 인터페이스를 반환합니다.
GZIP : io.Reader // IO NewReader (R io.Reader) FUNC : NewReader (R io.Reader) (* 리더, 오류) FUNC // Reader가 FUNC 닫기()
의 bzip2 있습니다. 판독기에 func이 없습니다. Close()
이 때문에 NewReader (파일)를 처음으로 반환 할 수 없습니다.
감사합니다.
관련/중복 가능성 (https://stackoverflow.com/questions/28279155/using-defer-with-pointers/28279237#28279237). – icza