Go 语言io包接口,核心是实现数据的 "读、写、流转" ,可分为基础接口 和工具类函数 / 包装器两类,以下是总结:
一、基础核心接口
这些是io包的底层抽象,所有读写操作都基于它们:
-
io.Reader(读接口)- 方法:
Read(p []byte) (n int, err error) - 作用:从数据源读取数据到
p,返回读取的字节数和错误(读完返回io.EOF)。 - 示例实现:
strings.Reader、bytes.Reader、文件读取器等。
- 方法:
-
io.Writer(写接口)- 方法:
Write(p []byte) (n int, err error) - 作用:将
p中的数据写入目标,返回写入的字节数和错误。 - 示例实现:
bytes.Buffer、os.File、标准输出os.Stdout等。
- 方法:
-
io.Closer(关闭接口)- 方法:
Close() error - 作用:关闭资源(如文件、网络连接),释放资源。
- 方法:
二、常用工具类函数 / 包装器
基于基础接口封装的实用功能,简化读写逻辑:
| 工具 / 函数 | 作用 |
|---|---|
io.Copy(dst, src) |
将src(Reader)的数据拷贝到dst(Writer),实现数据流转。 |
io.CopyBuffer(dst, src, buf) |
同io.Copy,但允许指定自定义缓冲区,避免重复分配内存。 |
io.ReadAll(r) |
读取r中的全部数据,返回字节切片(适用于小数据量)。 |
io.ReadAtLeast(r, buf, min) |
从r读取至少min字节到buf,不足则报错(保证读取足够数据)。 |
io.ReadFull(r, buf) |
从r读取恰好len(buf)字节到buf,不足则报错(保证固定长度)。 |
三、读取器 / 写入器包装器
对基础Reader/Writer进行增强,实现特殊功能:
| 包装器 | 作用 |
|---|---|
io.LimitReader(r, n) |
包装r,仅允许读取最多n字节(限制读取长度)。 |
io.MultiReader(r1, r2...) |
合并多个Reader为一个,按顺序读取所有子读取器的数据。 |
io.MultiWriter(w1, w2...) |
合并多个Writer为一个,写入数据时同时转发到所有子写入器(一分多写)。 |
io.NewSectionReader(r, off, n) |
从r的偏移量off开始,读取n字节的片段(读取数据源的指定区间)。 |
io.Pipe() |
创建内存管道,返回Reader和Writer,实现 goroutine 间的流式通信。 |