本节开始将深入浅出的讲解 Go 的标准库-io。本节会有大量的代码示例内容,建议配合实操食用!
本文目标如下:
io
包是标准库中处理输入/输出(I/O)操作的核心。它通过定义接口和工具函数,抽象出通用的方式来读写数据流,提升代码的复用性和扩展性。
io
包的核心功能包括:
io.ReadFull
读取固定大小的数据运行结果:
读取到的数据: Hello (长度: 5)
io.Copy
转发数据将数据从一个源直接复制到目标:
运行结果:
Copy this content to stdout.
复制字节数: 27
io.LimitReader
限制读取大小运行结果:
读取到的数据: This strin (长度: 10)
io.TeeReader
实现边读取边写入将读取的数据同时写入另一个目标,例如日志或调试文件:
运行结果:
读取到的数据: Log this content. (长度: 17)
文件 log.txt
内容:
Log this content.
io.SectionReader
读取部分内容用于精确读取数据的一段,例如从大文件中提取指定片段:
运行结果:
读取到的数据: this (长度: 4)
名称 | 描述 |
---|---|
EOF | 表示到达输入流结束,通常由读取方法返回,如 Read 。 |
ErrClosedPipe | 读写已关闭的管道时返回。 |
ErrNoProgress | 连续多次 Read 无数据且无错误时返回,通常是 Reader 实现问题。 |
ErrShortBuffer | 提供的缓冲区太小。 |
ErrShortWrite | 写入的数据少于请求量但没有返回错误。 |
ErrUnexpectedEOF | 在读取固定大小块时意外遇到 EOF。 |
接口 | 描述与方法 |
---|---|
Reader | 基础读取接口,方法:Read(p []byte) (n int, err error) |
Writer | 基础写入接口,方法:Write(p []byte) (n int, err error) |
Closer | 基础关闭接口,方法:Close() error |
Seeker | 支持偏移定位的接口,方法:Seek(offset int64, whence int) (int64, error) |
ReadCloser | 同时支持 Reader 和 Closer 功能。 |
WriteCloser | 同时支持 Writer 和 Closer 功能。 |
ReadWriter | 同时支持 Reader 和 Writer 功能。 |
ReadWriteCloser | 同时支持 Reader 、Writer 和 Closer 功能。 |
ReaderAt | 从指定偏移读取的接口,方法:ReadAt(p []byte, off int64) (n int, err error) |
WriterAt | 从指定偏移写入的接口,方法:WriteAt(p []byte, off int64) (n int, err error) |
ByteReader | 读取单字节的接口,方法:ReadByte() (c byte, err error) |
ByteScanner | 增强的单字节读取接口,方法:UnreadByte() error |
RuneReader | 读取 UTF-8 字符的接口,方法:ReadRune() (r rune, size int, err error) |
RuneScanner | 增强的 UTF-8 字符读取接口,方法:UnreadRune() error |
ByteWriter | 写入单字节的接口,方法:WriteByte(c byte) error |
函数 | 描述 |
---|---|
LimitReader | 限制读取的 Reader:func LimitReader(r Reader, n int64) Reader |
NewSectionReader | 创建一个从指定偏移开始读取固定大小段的 Reader:func NewSectionReader(r ReaderAt, off int64, n int64) *SectionReader |
Pipe | 创建一个内存管道:func Pipe() (*PipeReader, *PipeWriter) |
TeeReader | 返回一个 Reader,同时将读取的数据写入 Writer:func TeeReader(r Reader, w Writer) Reader |
MultiReader | 将多个 Reader 串联为一个 Reader:func MultiReader(readers ...Reader) Reader |
MultiWriter | 将数据同时写入多个 Writer:func MultiWriter(writers ...Writer) Writer |
Copy | 从 Reader 拷贝数据到 Writer:func Copy(dst Writer, src Reader) (written int64, err error) |
CopyN | 从 Reader 拷贝固定字节数到 Writer:func CopyN(dst Writer, src Reader, n int64) (written int64, err error) |
ReadAtLeast | 至少读取指定字节数:func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error) |
ReadFull | 精确读取指定字节数:func ReadFull(r Reader, buf []byte) (n int, err error) |
WriteString | 将字符串写入 Writer:func WriteString(w Writer, s string) (n int, err error) |