【发布时间】:2019-01-03 06:51:39
【问题描述】:
我在官方 go 文档中查看 NewScanner,它提到要传递给 bufio.NewScanner 的参数应该是 io.Reader 类型。但是,以下对我有用:
file, err := os.Open("filename")
scanner := bufio.NewScanner(file)
os.Stdin 也是如此。鉴于此,os.File、os.Stdin 和 io.Reader 之间有什么区别?它们可以互换吗?
【问题讨论】:
-
io.Reader 是一个接口。 os.File 和 os.Stdin 使用方法 Read() 实现了这个接口,可以在 io.Reader 期望的地方使用
-
@Projjol
os.File是 concrete 类型,您的file是该类型的变量,os.Stdin也是该类型的变量。io.Reader是一个 interface 类型,os.File类型实现了io.Reader接口,因此值file和os.Stdin可以用作NewScanner 的参数。 -
感谢@Uvelichitel
标签: file go operating-system