Go文件操作核心是os、io和bufio包,需理解“文件即句柄、读写即字节流”;打开用os.Open/ os.OpenFile并defer Close;读取按需选ReadFile、Scanner或Read;写入用WriteFile、WriteString或fmt.Fprintf;辅以Stat、MkdirAll、Rename等操作,务必处理错误与释放资源。

Go 语言的文件操作简洁直接,核心依赖 os 和 io/ioutil(已弃用,推荐用 os + io 组合)以及 bufio 包。关键在于理解“文件即句柄”和“读写即字节流”的设计思路。
打开与关闭文件
使用 os.Open(只读)或 os.OpenFile(可指定标志位)获取 *os.File,必须手动调用 Close(),建议搭配 defer:
-
f, err := os.Open("data.txt")—— 只读打开,文件必须存在 -
f, err := os.OpenFile("log.txt", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)—— 追加写入,不存在则创建 - 务必 defer f.Close(),否则可能泄漏文件描述符
读取文件内容
按需选择方式,避免一次性加载大文件到内存:
- 小文件快捷读:
data, err := os.ReadFile("config.json")(Go 1.16+,返回 []byte) - 逐行读取:
scanner := bufio.NewScanner(f),然后for scanner.Scan() { line := scanner.Text() } - 按字节/块读取:
n, err := f.Read(buf),需手动管理缓冲区和循环
写入文件内容
写入前注意权限和路径是否存在:
立即学习“go语言免费学习笔记(深入)”;
- 覆盖写整个文件:
err := os.WriteFile("output.txt", []byte("hello"), 0644) - 追加写字符串:
f, _ := os.OpenFile("log.txt", os.O_APPEND|os.O_WRONLY, 0644); _, _ = f.WriteString("info: done\n"); f.Close() - 格式化写入:
fmt.Fprintf(f, "value=%d, name=%s\n", 42, "go")
检查与辅助操作
常见元信息和安全操作不可少:
- 判断文件是否存在:
_, err := os.Stat("file.txt"); if os.IsNotExist(err) { ... } - 获取文件信息:
fi, _ := f.Stat(); fi.Size(), fi.Mode(), fi.ModTime() - 创建目录:
os.MkdirAll("path/to/dir", 0755) - 重命名/移动:
os.Rename("old.txt", "new.txt")
基本上就这些。Go 的文件操作不复杂但容易忽略错误处理和资源释放,养成检查 err 和及时 Close 的习惯,就能稳稳落地。










