로컬 파일을 열고 io.Reader
. 그 이유는 io.Reader
다음과 같이 사용중인 라이브러리에 a 를 공급해야하기 때문입니다 .
func read(r io.Reader) (results []string) {
}
답변:
os.Open
반환 io.Reader
http://play.golang.org/p/BskGT09kxL
package main
import (
"fmt"
"io"
"os"
)
var _ io.Reader = (*os.File)(nil)
func main() {
fmt.Println("Hello, playground")
}
nil
가리키는 올바른 유형 의 포인터입니다 os.File
. (이 경우에는 실제로 아무것도 할 수 없습니다.) 그리고 var _ io.Reader = (*os.File)(nil)
할당은 컴파일러 *os.File
가 인 io.Reader
(그렇지 않으면 할당이 유효하지 않음) 확인하도록합니다. 당신이 놀이터에 가서 변경하는 경우 *os.File
에 *os.Process
당신이 인터페이스를 만족하지 않는 것들에 대해 생성하는 오류를 볼 수 있습니다.
func (f *File) Read(b []byte) (n int, err error)
에서와 같은 것을 본다 Reader
.
사용 os.Open () :
func Open (name string) (file * File, err error)
열기는 읽기 위해 명명 된 파일을 엽니 다. 성공하면 반환 된 파일의 메서드를 사용하여 읽을 수 있습니다. 연관된 파일 설명자는 O_RDONLY 모드를 갖습니다. 오류가 있으면 * PathError 유형이됩니다.
반환 된 type 값은 인터페이스를 *os.File
구현합니다 io.Reader
.
* os.File 유형은 io.Reader 인터페이스를 구현하므로 파일을 Reader로 반환 할 수 있습니다. 그러나 다음과 같이 큰 파일을 읽으려는 의도가있는 경우 bufio 패키지 를 사용하는 것이 좋습니다 .
file, err := os.Open("path/file.ext")
// if err != nil { ... }
return bufio.NewReader(file)
bufio
대용량 파일 을 권장하는 이유에 대해 자세히 설명해 주 시겠습니까?
path/file.ext
. 다른 대답 os.File
은 무엇인지 설명하지 않았습니다.