我想打开一个本地文件,并返回一个io.Reader
。原因是我需要向io.Reader
正在使用的库中提供,例如:
func read(r io.Reader) (results []string) {
}
Answers:
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
(否则该赋值将无效)。如果您转到Playground并更改*os.File
为Playground,*os.Process
则会看到它针对不满足界面要求的东西生成的错误。
func (f *File) Read(b []byte) (n int, err error)
的与中的相同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
。