今天我们来介绍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.从标准输入读取
2.从文件读取
备注:(变量file是一个File类型结构体,实现了reader方法,所以可以作为ReadFrom的第一个参数,参考如下截图)
3.从字符串读取
注意事项:
1.并发不安全
2.io.EOF 变量的定义:var EOF = errors.New("EOF"),是 error 类型。根据 reader 接口的说明,在 n > 0 且数据被读完了的情况下,返回的 error 有可能是 EOF 也有可能是 nil。