登录
首页 >  Golang >  Go问答

为什么可以将 *os.File 用作 bufio.NewScanner 的参数,即使定义指定它只接受 io.Reader?

来源:stackoverflow

时间:2024-02-06 14:12:24 126浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《为什么可以将 *os.File 用作 bufio.NewScanner 的参数,即使定义指定它只接受 io.Reader?》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

尝试学习 go 并一直使用 bufio.newscanner 来读取文件内容。我使用以下代码执行此操作:

input_file, err := os.Open("input.txt")

if err != nil {
    panic(err)
}

scanner := bufio.NewScanner(input_file)
//do stuff

以为我会看看定义并看到一些奇怪的东西(至少对我来说),上面的 os.open("input.txt") 实际上返回一个 *os.filebufio.newscanner 期望一个 io。 reader作为参数。 reader 是一个接口,而 file 是一个结构体,它不实现该接口或类似的东西(如果可能的话)。

但看起来这完全没问题。我是否遗漏了 go 的工作原理?我有 c# 背景,对我来说参数是不同类型的,所以编译器不应该允许这样做,对吗?

只是好奇,不知道还能在哪里问这个问题。


正确答案


os.file 实际上正在实现 io.reader 接口。

这意味着它实现了 io.reader 接口提供的具有相同签名的所有方法。

在这种特殊情况下,此方法:

func (f *File) Read(b []byte) (n int, err error)

以上就是《为什么可以将 *os.File 用作 bufio.NewScanner 的参数,即使定义指定它只接受 io.Reader?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>