Example: io.Copy
简明示例
io.Copy 是一个高效的数据管道函数,就像一条高效的数据直连管道。它能将数据直接从输入流(io.Reader)源源不断地抽送到输出流(io.Writer),期间不会把整个文件一次性读入内存,因此非常适合处理大文件或网络流。
输出
零内存高效搬运
io.Copy 是一个高效的搬运工,在底层通过默认 32 KB 的临时缓冲区实现高效的数据流转发,占用资源极低, 若需要根据业务场景调整缓冲区大小,可使用标准库的另外来一个函数func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error):
- dst / src:目标写入流与源读取流。
- buf:手动传入的复用切片(若传入 nil,则系统会自动分配 32 KB 缓冲区,等同io.Copy)。
使用io.Copy进行大文件复制示例
在实际开发中,处理几百 MB 甚至数 GB 的大文件(如视频、压缩包、日志等)时,如果使用 os.ReadFile 或 io.ReadAll 一次性将文件读入内存,极易引发 OOM(内存溢出)。 使用io.Copy 复制 10 MB 还是 10 GB 的文件,可以让所占用的内存始终保持在极低的水平。