登录
首页 >  Golang >  Go问答

io.Reader和strings.Reader有什么关联?

来源:SegmentFault

时间:2023-01-23 17:43:01 488浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《io.Reader和strings.Reader有什么关联?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我在学习Reader的时候,发现有io.Reader和strings.Reader:

io.Reader:

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

strings.Reader:

type Reader struct {
    s        string
    i        int64 // current reading index
    prevRune int   // index of previous rune; or 

请问一下,io.Reader是一个接口,strings.Reader是一个结构体,它们之间看起来没有任何关系呀。

我在看这个教程的时候,
https://blog.csdn.net/preyta/...

发现示例中传入的是strings.Reader而不是io.Reader,但是应该传入io.Reader:

r := strings.NewReader("hello world !") //  strings.Reader io.Reader
reader := bufio.NewReader(r)

这里io.Reader和strings.Reader有内在联系吗?我怎么没有发现呢?请指点迷津。

正确答案

strings.Reader有个方法

func (r *Reader) Read(b []byte) (n int, err error) 

这与io.Reader中的定义一致, 所以strings.Reader实现了io.Reader.

所有需要io.Reader作为参数的地方, 都可以用strings.Reader.

至于bufio.NewReader的参数

io.Reader
, 因为
io.Reader
是一个interface也就是一个抽象(即它无法被实例化), 所以你永远也不可能传入一个类型为
io.Reader
的参数,
而只能可能传入一个实现了
func (r *Reader) Read(b []byte) (n int, err error)
方法的对象.

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《io.Reader和strings.Reader有什么关联?》文章吧,也可关注golang学习网公众号了解相关技术文章。

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