如何*文件类型可以作为Reader类型传递?

时间:2017-07-10 20:28:58

标签: go

我是golang的新手。我看到了像这样的golang代码:

file, err := os.Open("input.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

scanner := bufio.NewScanner(file)
...

根据文档,os.Open返回(*File, error)类型,bufio.NewScanner(r)的参数r具有io.Reader类型。

在上面的代码示例中,类型为file(指向*File类型的指针)的变量File可以传递给参数期望的bufio.NewScanner方法io.Reader类型。怎么可能呢?

我检查了源代码,File类型(https://golang.org/src/os/types.go?s=369:411#L6)和io.Reader类型(https://golang.org/src/io/io.go?s=3303:3363#L67)似乎无关。那么参数传递怎么可能呢?

1 个答案:

答案 0 :(得分:2)

io.Readerinterface*os.File实现了界面。我强烈建议您解释in the Go Tour