

新闻资讯
技术学院Go语言写入文件主要有三种方式:os.File.Write用于二进制数据,需检查返回值并调用Close;bufio.Writer提升文本写入效率,需Flush;fmt.Fprint系列适合格式化输出;安全写入推荐临时文件+原子重命名。
Go语言提供了多种方式写入文件,最常用的是 os 包直接操作文件句柄,以及 bufio 包配合使用以提升文本写入效率。写文本适合用 bufio.Writer,写二进制或需要精确控制字节流时推荐直接用 os.File.Write()。
os.Create 创建一个可写的空文件(若存在则清空),返回 *os.File,它实现了 io.Writer 接口,可直接调用 Write([]byte) 写入原始字节。
gob、protobuf)、加密数据等二进制内容Write 不保证一次写完全部字节,应检查返回值和错误;生产中建议用 WriteAll 简化逻辑Close(),否则可能丢失数据或占用文件句柄示例:
file, err := os.Create("data.bin")直接对文件反复调用 WriteString 或 fmt.Fprintln 效率低,因为每次都会触发系统调用。bufio.Writer 在内存中缓存数据,达到缓冲区大小(默认 4KB)或显式 Flush() 时才真正写入磁盘。
bufio.NewWriterSize(file, 64*1024)
Flush(),否则缓冲区内容可能未落盘示例:
file, _ := os.Create("output.txt")fmt.Fprintf、fmt.Fprintln、fmt.Fprint 可以向任意 io.Writer(包括 *os.File 或 *bufio.Writer)输出格式化字符串,语义清晰,适合调试和简单文本生成。
*os.File,本质仍是多次系统调用,小量内容可接受;高频写入建议仍走 bufio.Writer
fmt 格式动词(%d、%v、%q 等),自动处理类型转换和分隔示例:
file, _ := os.Create("log.txt")直接 os.Create 会截断已有文件,若需保留原文件或防止写入中断导致损坏,可用临时文件 + 原子重命名方式:
filename.tmp
Close() 后,调用 os.Rename("filename.tmp", "filename")
数文件系统上,Rename 是原子操作,能避免读取到中间状态不复杂但容易忽略