我们在前几篇文章中,主要讨论了strings.Builder、strings.Reader和bytes.Buffer这三个数据类型。
知识回顾
还记得吗?当时还问过“它们都实现了哪些接口”。在我们继续讲解io包中的接口和工具之前,先来解答一下这个问题。
strings.Builder类型主要用于构建字符串,它的指针类型实现的接口有io.Writer、io.ByteWriter和fmt.Stringer。另外,它其实还实现了一个io包的包级私有接口io.stringWriter(自 Go 1.12 起它会更名为io.StringWriter)。
strings.Reader类型主要用于读取字符串,它的指针类型实现的接口比较多,包括:
1. io.Reader;
2. io.ReaderAt;
3. io.ByteReader;
4. io.RuneReader;
5. io.Seeker;
6. io.ByteScanner;
7. io.RuneScanner;
8. io.WriterTo;
共有 8 个,它们都是io包中的接口。其中,io.ByteScanner是io.ByteReader的扩展接口,而io.RuneScanner又是io.RuneReader的扩展接口。
bytes.Buffer是集读、写功能于一身的数据类型,它非常适合作为字节序列的缓冲区。 它的指针类型实现的接口就更多了。
更具体地说,该指针类型实现的读取相关的接口有下面几个。
1. io.Reader;
2. io.ByteReader;
3. io.RuneReader;
4. io.ByteScanner;
5. io.RuneScanner;
6. io.WriterTo;
共有 6 个。而其实现的写入相关的接口则有这些。