读文件首选ioutil.ReadFile处理小文件,因其简洁高效;大文件应选bufio.Scanner或Reader以节省内存;需精细控制时才用os.Open配合自定义缓冲。
Go 语言里读文件常用 ioutil、bufio 和 os 包,各有适用场景,性能表现也不同。直接读整个文件用 ioutil 最方便,处理大文件或需要逐行读时 bufio 更高效,os 提供底层控制,适合精细操作。
ioutil.ReadFile:简单粗暴,适合小文件
这个方法最省事,一行代码读完整个文件到内存。
• 优点:代码简洁,适合配置文件或小文本。
• 缺点:一次性加载,大文件会占用大量内存,可能拖慢程序。
• 用法:直接传文件名,返回字节切片和错误。
bufio.Scanner 或 bufio.Reader:按行或分块读,节省内存
适合读大文件,比如日志,一行一行处理,不占内存。
• 优点:内存友好,可以逐行处理,还能自定义分隔符。
• 缺点:代码比 ioutil 多几行,需要自己控制循环。
• 建议:用 Scanner 默认按行读,简单;需要更多控制时换 Reader。
os.Open + Read:最底层,最灵活
打开文件后自己控制读的大小,适合特殊需求。
立即学习“go语言免费学习笔记(深入)”;
• 优点:能指定 buffer 大小,完全掌控读取过程。
• 缺点:代码最多,容易出错,一般没必要用。
• 场景:需要自定义 buffer 或配合其他 io 操作时才考虑。
性能上,读小文件差别不大,ioutil 更快因为一步到位。大文件上 bufio 明显占优,因为它不全加载进内存。os 虽然底层,但没额外优化,性能和自己写循环差不多。
基本上就这些,选哪个看文件大小和处理方式。小文件图省事用 ioutil,大文件用 bufio,特殊需求再碰 os。