- 很底层,为很多其他包提供服务
- strings.Reader,返回的是Reader
go语言中,为了方便开发者使用,将IO操作封装在了如下几个包中:
- io为IO原语(I/O primitives) 提供基本的接口(os File Reader Writer)
- io/ioutil 封装一些实用的 I/O函数
- fmt实现格式化/O,类似C语言中的printf和scanf
- bufio实现带缓冲I/O(提高性能)
io-基本接口
reader接口
定义
官方说明:
- Read 将 len(p) 个字节读取到 p 中。它返回读取的字节数 n(0 <= n <= len(p)) 以及任何遇到的错误。 - Read只读不写 - 即使 Read 返回的 n < len(p),它也会在调用过程中占用 len(p) 个字节作为暂存空间。 - 若可读取的数据不到 len(p) 个字节,Read 会返回可用数据,而不是等待更多数据。(???,我想,意思就是,调用时,整体调用;返回时,按次读取)
- 当 Read 在成功读取 n > 0 个字节后遇到一个错误或 EOF (end-of-file),它会返回读取的字节数。 - 它可能会同时在本次的调用中返回一个non-nil???错误,或在下一次的调用中返回这个错误(且 n 为 0)。 - 一般情况下, Reader会返回一个非0字节数n, 若 n = len(p) 个字节从输入源的结尾处由 Read 返回,Read可能返回 err == EOF 或者 err == nil。并且之后的 Read() 都应该返回 (n:0, err:EOF)。
- 调用者在考虑错误之前应当首先处理返回的数据。这样做可以正确地处理在读取一些字节后产生的 I/O 错误,同时允许EOF的出现。
接口用法
Reader和Writer接口定义
io包最重要的是两个接口:Reader和Writer接口。本章所提到的各种IO包,都跟这两个接口有关,也就是说,只要实现了这两个接口,它就有了IO功能
- reader接口定义
- write接口定义
NOTE:
接口是类型,需要定义变量,才能使用;接口是方法集合,这里,一个接口只有一个方法,目的在约束变量???
哪些用到了Reader和Writer接口
- os.File功能,同时实现了io.Reader和io.Writer
- strings .Reader实现了io. Reader
- 比如string.NewString返回Reader,其返回的变量,可以直接调用read方法
结果是再次打印出了helllo world,这个过程无意义,只是为了凸显 r 是是什么样的变量 - NewReader函数声明
- 比如string.NewString返回Reader,其返回的变量,可以直接调用read方法
- bufio. Reader/Writer分别实现了io. Reader和io. Writer
- 字节
- bytes.Buffer同时实现了io. Reader和io. Writer
- bytes . Reader实现了io. Reader
- 压缩算法:
compress/gzip. Reader/Writer分别实现了io.Reader 和io . Writer - 加密算法
- crypto/cipher . StreamReader/SfreamWriter分别实现了i0. Reader和io. Writer
- crypto/tls.Conn同时实现了io. Reader和io. Writer
- 编码:
encoding/csv Reader/Writer 分别实现了io.Reader 和io. Writer
io一看
- 分成很多子包
- 实例一览
- copy