Hello! 欢迎来到小浪云数据!

strings.Reader 如何实现 io.Reader 接口?


strings.Reader 如何实现 io.Reader 接口?

io.Reader 和 strings.Reader 的关联

在学习读取器(Reader)时,可能会遇到 io.Reader 和 strings.Reader 这两个类。虽然这二者名称相似,但它们在本质上却是截然不同的,一个是接口(io.Reader),而另一个是结构体(strings.Reader)。

起初,这两个类看似无关,但这并不意味着它们之间没有联系。在 bufio 包中,NewReader 函数的入参类型是 io.Reader。而 strings.Reader 实现了一个方法:func (r *Reader) Read(b []byte) (n int, err error),该方法与 io.Reader 接口中定义的方法一致。

因此,strings.Reader 实现了 io.Reader 接口,这意味着它具备了 io.Reader 规定的功能。通过实现这个接口,strings.Reader 可以作为一个可以读取数据的源被传递给需要 io.Reader 作为参数的函数。

简单来说,strings.Reader 虽然是一个结构体,但它可以通过实现 io.Reader 接口而提供与该接口相同的功能。因此,在需要 io.Reader 的地方,也可以使用 strings.Reader 对象。

举个例子,在 bufio.NewReader 中,你可以将 strings.Reader 作为入参传递给这个函数,因为 strings.Reader 实现了 io.Reader 接口,并且具备了该接口要求的功能。

相关阅读