go标准库-IO 接口-Reader

53 阅读1分钟

今天我们来介绍IO相关的第一个接口:Reader 接口

Reader 接口的定义如下:
​
type Reader interface {
    Read(p []byte) (n int, err error)
}
​
Read方法:
入参:read尝试将p读满(p的长度是多少就读进来多少)
返回:1.实际读取的字节数n(n长度在0-len(p)之间)
     2.如果实际读取到的数据小于len(p),也会占用len(p)个字节作为暂存空间,并且之间返回可用数据,       不用一直等待。
     3.在读取一部分后数据遇到错误,那已经读到的这部分数据还是有效的,会返回读到的字节数n,所以在        考虑错误处理时候,要记得把这部分数据进行处理,这样做可以正确地处理在读取一些字节后产生的        I/O 错误,同时允许EOF的出现。

举例:

1.从标准输入读取

image.png

2.从文件读取

image.png

备注:(变量file是一个File类型结构体,实现了reader方法,所以可以作为ReadFrom的第一个参数,参考如下截图)

image.png

3.从字符串读取

image.png

注意事项:

1.并发不安全

2.io.EOF 变量的定义:var EOF = errors.New("EOF"),是 error 类型。根据 reader 接口的说明,在 n > 0 且数据被读完了的情况下,返回的 error 有可能是 EOF 也有可能是 nil。