我想打开一个本地文件,然后返回一个io.Reader。原因是我需要将io.Reader提供给我正在使用的库,例如:
func read(r io.Reader) (results []string) {
}
答案 0 :(得分:72)
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")
}
答案 1 :(得分:32)
使用os.Open():
func Open(名称字符串)(文件*文件,错误错误)
打开打开命名 文件供阅读。如果成功,返回文件上的方法可以是 用于阅读;关联的文件描述符具有模式O_RDONLY。如果 有一个错误,它将是* PathError类型。
类型*os.File
的返回值实现io.Reader
接口。
答案 2 :(得分:17)
类型* os.File实现了io.Reader接口,因此您可以将文件作为Reader返回。 但是如果您有阅读大文件的意图,我建议您使用bufio包,如下所示:
file, err := os.Open("path/file.ext")
// if err != nil { ... }
return bufio.NewReader(file)
答案 3 :(得分:1)
这里是一个示例,其中我们打开一个文本文件,并从返回的* os.File实例f创建一个io.Reader。
package main
import (
"io"
"os"
)
func main() {
f, err := os.Open("somefile.txt")
if err != nil {
panic(err)
}
defer f.Close()
var r io.Reader
r = f
}