golang:从本地文件创建一个io.Reader

时间:2014-09-05 01:05:30

标签: go

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

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

}

4 个答案:

答案 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
}