go写文件需据场景选方案:小文件用os.writefile(覆盖、简洁);高吞吐用bufio.writer+os.file(可追加、需flush);极端性能可 syscall.write(零拷贝、不跨平台);关键数据须f.sync保证落盘。
Go 语言写文件本身很简单,但实际项目中常因忽略缓冲、错误处理或同步策略,导致性能差、数据丢失或竞态问题。
用 os.WriteFile 快速写小文件(≤几 MB)
适合配置文件、日志快照、临时导出等一次性写入场景。它内部自动处理打开、写入、关闭,代码最简,但会覆盖原文件且无增量能力。
- 若文件已存在,
os.WriteFile总是覆盖,不支持追加 - 底层调用
os.OpenFile+Write+Close,对大文件反复拷贝内存,性能急剧下降 - 错误只返回一次(写失败时),无法区分是权限不足、磁盘满还是路径不存在
示例:
err := os.WriteFile("config.json", []byte(`{"mode":"prod"}`), 0644)
if err != nil {
log.Fatal(err) // 注意:这里 panic 可能掩盖真实原因
}
用 bufio.Writer + os.File 控制缓冲与追加
这是高吞吐写入(如日志、CSV 流、批量导出)的推荐方式。关键在显式管理文件句柄和缓冲区大小,避免频繁系统调用。