Go语言中读取文件部分内容主要用*os.File的ReadAt方法,它支持从指定偏移量随机读取且不改变文件位置;也可用Seek+Read组合实现灵活定位;读文本行需自行解析,因行长度不确定。
Go语言中读取文件部分内容(比如从指定偏移量开始读取若干字节)主要依靠 *os.File 的 ReadAt 方法,它支持随机访问,不改变文件当前读写位置,适合按字节偏移精准读取。
ReadAt 是最直接的方式:传入一个字节切片和起始偏移量,它会从该位置开始最多读取 len(buf) 个字节,返回实际读取数和可能的错误。
示例:读取文件第 100 字节开始的 512 字节
file, err := os.Open("data.bin")
if err != nil {
log.Fatal(err)
}
defer file.Close()
buf := make([]byte, 512)
n, err := file.ReadAt(buf, 100) // 从第100字节(0-based)开始读
if err != nil && err != io.EOF {
log.Fatal(err)
}
// buf[:n] 即为读到的内容
如果需要多次不同偏移读取,或后续还要继续顺序读,可用 Seek 定位再调用普通 
Read。注意 Seek 会改变文件内部偏移指针。
file.Seek(offset, io.SeekStart):从文件开头偏移 offset 字节file.Seek(offset, io.SeekCurrent):相对于当前位置偏移file.Seek(0, io.SeekEnd) 配合 Seek(-n, io.SeekCurrent) 可读末尾 n 字节示例:跳过前 200 字节,读接下来 100 字节
_, err := file.Seek(200, io.SeekStart)
if err != nil {
log.Fatal(err)
}
buf := make([]byte, 100)
n, err := file.Read(buf)
按偏移读取容易遇到文件长度不足、越界等情况,需主动检查:
ReadAt 在到达 EOF 时返回 io.EOF,但只要读到至少 1 字节就返回 n > 0,错误不一定是失败file.Stat() 获取文件大小,提前判断 offset + len(buf) 是否越界ReadAt;若要混合顺序读+跳读,用 Seek 更清晰Go 没有内置“按行偏移读取”方法。如果目标是读第 N 行,不能仅靠字节偏移——因为行长度不确定。稳妥做法是:
bufio.Scanner 逐行扫描,计数到目标行再提取Seek 到附近,再向后找第一个 \n 对齐行首纯字节偏移读取适用于二进制、固定格式(如 ELF、PNG)、或已知结构的文件,对文本行需额外逻辑对齐。
# go
# golang
# go语言
# 字节
# EOF
# 指针
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Go语言中slice追加操作的底层共享机制详解
Win11如何关闭小娜Cortana Win11禁用Cortana语音助手【优化】
Mac的访达(Finder)怎么用_Mac文件管理入门教程【详解】
php怎么下载安装后测试是否成功_简单脚本验证方法【操作】
Python异步编程高级项目教程_asyncio协程任务管理实战
Win11怎么关闭应用权限_Windows11相机麦克风隐私管理
海外搜索引擎推广效果怎么样,怎么分析效果!
手机php怎么转mp4_手机端php文件转mp4app推荐【指南】
How to Properly Use NumPy in VS Code
Python与GPU加速技术_CUDA与Numba高性能计算实践
Win11怎么关闭搜索历史_Win11清除设备上的搜索历史记录
Windows10任务栏图标变成白色文件_Win10重建图标缓存修复方法
Win11怎么关闭自动更新 Win11永久关闭系统更新的有效方法【技巧】
c++怎么使用std::unique实现去重_c++ 容器元素排序与连续重复删除【教程】
Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改
Windows10如何更改桌面图标间距_Win10注册表WindowMetrics修改
php报错怎么查看_定位PHP致命错误与警告的方法【教程】
Win11无法安装软件怎么办_Win11解除应用安装限制设置【修复】
c++中如何对数组进行排序_c++数组排序算法汇总
Win11怎么清理C盘虚拟内存_Win11清理虚拟内存设置【教程】
如何在Golang中处理通道发送接收错误_防止阻塞或panic
Win11任务栏怎么放到顶部_Win11修改任务栏位置方法【详细】
如何在包含多值的列中精准搜索指定演员?
如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
Python字符串操作教程_切片拼接与格式化详解
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
c++获取当前时间戳_c++ time函数使用详解
如何在Golang中实现并发消息队列消费者_Golang channel消息消费实践
Python抽象类与接口设计_规范说明【指导】
Linux怎么设置磁盘配额_Linux系统Quota安装与用户空间限制【教程】
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何在 Go 同包不同文件中正确引用结构体
静态属性修改会影响所有实例吗_php作用域操作符下静态存储【教程】
Win11怎么卸载Photos应用_Win11卸载Photos应用方法【教程】
Win11相机打不开提示错误怎么修_相机权限开启与驱动修复【影像修复】
如何用正则与预处理高效拦截带干扰符的恶意域名
Win10怎么关闭自动更新错误弹窗_Win10策略屏蔽失败提示减少干扰【防护】
c++如何连接Redis c++ hiredis库使用教程【指南】
Win11怎么设置屏保时间_调整Win11屏幕保护等待时间【详解】
Windows10如何查看保存的WiFi密码_Win10命令行netsh wlan查询
如何使用Golang reflect检查方法数量_动态分析类型方法
如何在 IIS 上为 ASP.NET 6 应用排除特定目录并交由 PHP 处理
VSC怎么创建PHP项目_从零开始搭建项目的步骤【操作】
c++ nullptr与NULL区别_c++11空指针规范
Win11怎么开启游戏模式_Windows11优化游戏帧数设置指南
php打包exe如何加密代码_防反编译保护方法【技巧】
如何在Golang中处理二进制数据_Golang io与encoding/binary二进制操作方法
如何使用Golang实现跨域请求支持_Golang CORS配置与处理方法
Win11怎么更改系统语言_Win11中文语言包下载与安装【指南】
2026-01-04
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。