os.File,io.Reader和os.Stdin之间的区别

时间:2018-07-26 09:55:03

标签: file go operating-system

我在go go官方文档中查看了NewScanner,它提到要传递给bufio.NewScanner的参数应该为io.Reader类型。但是,以下对我有用:

file, err := os.Open("filename")
scanner := bufio.NewScanner(file)

os.Stdin也可以看到相同的内容。鉴于此,os.Fileos.Stdinio.Reader有什么区别?它们可以互换吗?

1 个答案:

答案 0 :(得分:2)

这是因为bufio.NewScannerio.Reader作为参数。

func NewScanner(r io.Reader) *Scanner

io.Reader是包装基本Read方法的接口。

type Reader interface {
        Read(p []byte) (n int, err error)
}

来自Golang的os package

  

Open打开命名文件以供读取。如果成功,在   返回的文件可用于读取;关联的文件描述符   的模式为O_RDONLY。如果有错误,它将是类型   * PathError。

func Open(name string) (file *File, err error)

返回的值*os.File实现io.Reader

因此,无论使用哪种实现,都可以将Reader接口作为参数传递给以io.Reader作为参数的任何方法。