跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何使用Golang写入文件数据_通过os和bufio写入文本和二进制

Go语言写入文件主要有三种方式:os.File.Write用于二进制数据,需检查返回值并调用Close;bufio.Writer提升文本写入效率,需Flush;fmt.Fprint系列适合格式化输出;安全写入推荐临时文件+原子重命名。 Go语言提供了多种方式写入文件,最常用的是
os
包直接操作文件句柄,以及
bufio
包配合使用以提升文本写入效率。写文本适合用
bufio.Writer
,写二进制或需要精确控制 字节 流时推荐直接用
os.File.Write()
。 用 os.Create + Write 写入二进制数据
os.Create
创建一个可写的空文件(若存在则清空),返回
*os.File
,它实现了
io.Writer
接口,可直接调用
Write([]byte)
写入原始字节。 适合写图片、序列化结构体(如
gob
、
protobuf
)、加密数据等二进制内容 注意:
Write
不保证一次写完全部字节,应检查返回值和错误;生产中建议用
WriteAll
简化逻辑 务必在操作后调用
Close()
,否则可能丢失数据或占用文件句柄 示例: Trae win Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。 下载 file, err := os.Create("data.bin")if err != nil {log.Fatal(err)}defer file.Close()// 写入字节切片_, err = file.Write([]byte{0x01, 0x02, 0xFF})if err != nil {log.Fatal(err)} 用 bufio.Writer 写入文本更高效 直接对文件反复调用
WriteString
或
fmt.Fprintln
效率低,因为每次都会触发系统调用。
bufio.Writer
在内存中缓存数据,达到缓冲区大小(默认 4KB)或显式
Flush()
时才真正写入磁盘。 立即学习 “ go语言免费学习笔记(深入) ”; 适合日志、配置生成、CSV/JSON 行写入等文本场景 创建时可传入自定义缓冲区大小:
bufio.NewWriterSize(file, 64*1024)
别忘了最后调用
Flush()
,否则缓冲区内容可能未落盘 示例: file, _ := os.Create("output.txt")defer file.Close()wr := bufio.NewWriter(file)defer wr.Flush() // 确保缓冲区写出wr.WriteString("Hello, ")wr.WriteString("World!\n")wr.WriteString("Line 3\n") 用 fmt.Fprint 系列函数格式化写入
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")defer file.Close()fmt.Fprintln(file, "Start at:", time.Now())fmt.Fprintf(file, "Count: %d, Status: %s\n", 42, "ok") 安全写入:避免覆盖与原子性考虑 直接
os.Create
会截断已有文件,若需保留原文件或防止写入中断导致损坏,可用临时文件 + 原子重命名方式: 写入到
filename.tmp
写完并
Close()
后,调用
os.Rename("filename.tmp", "filename")
在大多数文件系统上,
Rename
是原子操作,能避免读取到中间状态 注意:跨文件系统移动不保证原子性,且 Windows 对打开的文件重命名有限制 不复杂但容易忽略

相关文章