GO学习-io包常用接口

Go 语言io包接口,核心是实现数据的 "读、写、流转" ,可分为基础接口工具类函数 / 包装器两类,以下是总结:

一、基础核心接口

这些是io包的底层抽象,所有读写操作都基于它们:

  1. io.Reader(读接口)

    • 方法:Read(p []byte) (n int, err error)
    • 作用:从数据源读取数据到p,返回读取的字节数和错误(读完返回io.EOF)。
    • 示例实现:strings.Readerbytes.Reader、文件读取器等。
  2. io.Writer(写接口)

    • 方法:Write(p []byte) (n int, err error)
    • 作用:将p中的数据写入目标,返回写入的字节数和错误。
    • 示例实现:bytes.Bufferos.File、标准输出os.Stdout等。
  3. io.Closer(关闭接口)

    • 方法:Close() error
    • 作用:关闭资源(如文件、网络连接),释放资源。

二、常用工具类函数 / 包装器

基于基础接口封装的实用功能,简化读写逻辑:

工具 / 函数 作用
io.Copy(dst, src) srcReader)的数据拷贝到dstWriter),实现数据流转。
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() 创建内存管道,返回ReaderWriter,实现 goroutine 间的流式通信。
相关推荐
小巧的砖头13 分钟前
C#会重蹈覆辙吗?系列之2:反射及元数据的性能问题
开发语言·前端·c#
凯瑟琳.奥古斯特16 分钟前
力扣1009补码解法C++实现
开发语言·c++·算法·leetcode·职场和发展
2601_9636459220 分钟前
【2026最新】MATLAB教程(附安装包,非常详细)
开发语言·matlab·信息可视化
十月的皮皮1 小时前
C语言学习笔记20260706-栈的压入、弹出序列验证
c语言·笔记·学习
闲猫1 小时前
Python 虚拟环境 virtualenv & uvicorn 服务搭建 & FAstAPI 使用
开发语言·python
三月不知肉味y2 小时前
2026-07-05-JAVA面试场景题训练
java·开发语言·面试
豆瓣鸡2 小时前
封装 API 请求日志切面——从注解定义到 Starter 自动装配
java·开发语言·spring boot
渣渣灰飞2 小时前
MySQL 系统学习 第二阶段 第三章 DQL(Data Query Language)第二节:WHERE 条件查询
sql·学习·mysql
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:E-Brufen 架构设计
学习·flutter·华为·harmonyos
hssfscv3 小时前
QT的学习笔记4——QMainWindow、资源文件以及主要控件的介绍
笔记·qt·学习