我想打开一个本地文件,并返回一个io.Reader。原因是我需要将io.Reader提供给我正在使用的库,例如:
io.Reader
func read(r io.Reader) (results []string) { }
k2arahey1#
os.Open返回io.Readerhttp://play.golang.org/p/BskGT09kxL
os.Open
package main import ( "fmt" "io" "os" ) var _ io.Reader = (*os.File)(nil) func main() { fmt.Println("Hello, playground") }
mcvgt66p2#
使用os.Open():func Open(name string)(file *File,err error)打开打开命名文件以供阅读。如果成功,返回文件上的方法可用于阅读;相关联的文件描述符具有模式O_RDONLY。如果存在错误,则其类型为 *PathError。类型*os.File的返回值实现io.Reader接口。
*os.File
gijlo24d3#
类型 * os.File实现了io.Reader接口,因此您可以将文件作为Reader返回。但如果你想读取大文件,我建议你使用bufio包,类似这样:
file, err := os.Open("path/file.ext") // if err != nil { ... } return bufio.NewReader(file)
piok6c0g4#
下面是一个例子,我们打开一个文本文件,并从返回的 * 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 }
8xiog9wr5#
您可以只使用从os.Open返回的文件对象作为读取器。我相信这种类型的纪律被称为“鸭子打字”。例如,在go tour阅读器Exercise: rot13Reader中,您可以将main()替换为:
main()
func main() { file, err := os.Open("file.txt") // For read access. if err != nil { log.Fatal(err) } r := rot13Reader{file} io.Copy(os.Stdout, &r) }
5条答案
按热度按时间k2arahey1#
os.Open
返回io.Reader
http://play.golang.org/p/BskGT09kxL
mcvgt66p2#
使用os.Open():
func Open(name string)(file *File,err error)
打开打开命名文件以供阅读。如果成功,返回文件上的方法可用于阅读;相关联的文件描述符具有模式O_RDONLY。如果存在错误,则其类型为 *PathError。
类型
*os.File
的返回值实现io.Reader
接口。gijlo24d3#
类型 * os.File实现了io.Reader接口,因此您可以将文件作为Reader返回。但如果你想读取大文件,我建议你使用bufio包,类似这样:
piok6c0g4#
下面是一个例子,我们打开一个文本文件,并从返回的 * os.File示例f创建一个io.Reader
8xiog9wr5#
您可以只使用从
os.Open
返回的文件对象作为读取器。我相信这种类型的纪律被称为“鸭子打字”。例如,在go tour阅读器Exercise: rot13Reader中,您可以将main()
替换为: