Go语言 从本地文件创建io.Reader

vs91vp4v  于 2023-09-28  发布在  Go
关注(0)|答案(5)|浏览(184)

我想打开一个本地文件,并返回一个io.Reader。原因是我需要将io.Reader提供给我正在使用的库,例如:

func read(r io.Reader) (results []string) {

}
k2arahey

k2arahey1#

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")
}
mcvgt66p

mcvgt66p2#

使用os.Open():
func Open(name string)(file *File,err error)
打开打开命名文件以供阅读。如果成功,返回文件上的方法可用于阅读;相关联的文件描述符具有模式O_RDONLY。如果存在错误,则其类型为 *PathError。
类型*os.File的返回值实现io.Reader接口。

gijlo24d

gijlo24d3#

类型 * os.File实现了io.Reader接口,因此您可以将文件作为Reader返回。但如果你想读取大文件,我建议你使用bufio包,类似这样:

file, err := os.Open("path/file.ext")
// if err != nil { ... }

return bufio.NewReader(file)
piok6c0g

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
}
8xiog9wr

8xiog9wr5#

您可以只使用从os.Open返回的文件对象作为读取器。我相信这种类型的纪律被称为“鸭子打字”。例如,在go tour阅读器Exercise: rot13Reader中,您可以将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)
}

相关问题