全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang按行读取大文件_Golangbufio Scanner文件行读取技巧汇总

bufio.Scanner 按行读取大文件最常用且稳妥,但默认64KB行长限制易触发ErrTooLong,需调用scanner.Buffer()自定义缓冲区大小。

bufio.Scanner 按行读取大文件是 Go 中最常用也最稳妥的方式,它内存友好、语法简洁、默认支持 UTF-8,但需注意几处关键细节才能真正“稳读大文件”。

默认 Scanner 有 64KB 行长度限制

Scanner 默认每行最多读 64KB,超长会报 bufio.ErrTooLong。处理日志、JSON 行、或含超长字段的 CSV 时很容易触发。

  • scanner.Buffer(make([]byte, 64*1024), 1 手动扩容缓冲区(例如设上限为 1MB)
  • 更健壮的做法:捕获错误并跳过异常行,避免整个流程中断
  • 若确定行不会超长,可只调大第一个参数(初始缓冲),第二个参数(最大容量)保持合理即可

按行读取 ≠ 按 \n 切分 —— 注意换行符兼容性

Scanner 默认以 \n 为分隔符,对 Windows 的 \r\n 或旧 Mac 的 \r 不自动处理。实际读到的行末可能残留 \r,尤其在跨平台处理日志或配置文件时。

  • 简单清洗:读完后用 strings.TrimRight(line, "\r\n")
  • 如需严格按 CRLF 分割,可自定义 SplitFunc,但多数场景 Trim 更轻量可靠
  • 注意:UTF-8 BOM(\uFEFF)也可能出现在首行开头,必要时一并 Trim

大文件别忘关文件,且优先用 os.Open 而非 ioutil.ReadFile

ioutil.ReadFile(或 os.ReadFile)会把整个文件加载进内存,GB 级文件直接 OOM。正确姿势是流式打开 + 扫描。

  • f, err := os.Open("big.log"),defer f.Close()
  • 传给 Scanner: scanner := bufio.NewScanner(f)
  • 循环中用 for scanner.Scan() { line := scanner.Text() },不是 scanner.Bytes()(后者不自动解码 UTF-8)
  • 退出前务必检查 scanner.Err(),判断是 EOF 还是真实 I/O 错误

需要更高性能?考虑 bufio.Reader + ReadString('\n')

Scanner 内部就是封装了 Reader,但多了词法分析逻辑。如果只要纯按行切分、不做 token 化,且对性能敏感(如每秒百万行解析),可手动用 Reader:

  • reader := bufio.NewReader(f)
  • for { line, err := reader.ReadString('\n'); if err == io.EOF { break } else if err != nil { /* handle */ } }
  • 注意:ReadString 返回的 line 包含结尾的 \n,需用 strings.TrimSuffix(line, "\n")
  • 比 Scanner 略快、更可控,但少了缓冲区自动扩容和错误分类,需自行兜底

基本上就这些。Scanner 足够好用,关键在理解它的边界 —— 不是黑盒,而是带默认配置的流处理器。调对 Buffer、清好换行符、关好文件句柄,大文件就读得既稳又省。


# js  # json  # go  # golang  # csv  # 大文件  # 切分  # 自定义  # 会报  # 最常用  # 第一个  # 换行符  # 最多  # 句柄  # 出现在 


相关文章: C++用Dijkstra(迪杰斯特拉)算法求最短路径  网站企业制作流程,用什么语言做企业网站比较好?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  建站之星免费模板:自助建站系统与智能响应式一键生成  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  建站主机默认首页配置指南:核心功能与访问路径优化  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何在橙子建站上传落地页?操作指南详解  建站之星图片链接生成指南:自助建站与智能设计教程  高端建站三要素:定制模板、企业官网与响应式设计优化  建站主机选哪种环境更利于SEO优化?  深圳网站制作平台,深圳市做网站好的公司有哪些?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  ,网站推广常用方法?    如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  淘宝制作网站有哪些,淘宝网官网主页?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  如何通过商城自助建站源码实现零基础高效建站?  如何将凡科建站内容保存为本地文件?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  宝塔Windows建站如何避免显示默认IIS页面?  动图在线制作网站有哪些,滑动动图图集怎么做?  怎么将XML数据可视化 D3.js加载XML  如何安全更换建站之星模板并保留数据?  建站之星伪静态规则如何设置?  宿州网站制作公司兴策,安徽省低保查询网站?  如何通过免费商城建站系统源码自定义网站主题与功能?  建站之星与建站宝盒如何选择最佳方案?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何彻底删除建站之星生成的Banner?  如何用PHP工具快速搭建高效网站?  建站之星如何实现PC+手机+微信网站五合一建站?  常州自助建站工具推荐:低成本搭建与模板选择技巧  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何实现建站之星域名转发设置?  北京企业网站设计制作公司,北京铁路集团官方网站?  网站代码制作软件有哪些,如何生成自己网站的代码?  教学论文网站制作软件有哪些,写论文用什么软件 ?  建站之星如何助力网站排名飙升?揭秘高效技巧  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何选择适合PHP云建站的开源框架?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  孙琪峥织梦建站教程如何优化数据库安全?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  建站之星如何配置系统实现高效建站?  建站主机SSH密钥生成步骤及常见问题解答?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。