我是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)似乎无关。那么参数传递怎么可能呢?