打开文件时必须检查错误,如os.Create返回err则记录并终止;2. 写入时需检查WriteString等方法的err及实际写入字节数,确保数据完整。

在Go语言中进行文件写入时,错误处理是确保程序健壮性的关键环节。任何I/O操作都可能失败,因此必须对每一步可能出错的操作进行检查和处理。以下是实现文件写入错误处理的常用方式和最佳实践。
打开文件时的错误处理
使用 os.OpenFile 或 os.Create 打开文件时,必须检查返回的错误。
注意: 如果文件路径无效、权限不足或磁盘已满,这些函数都会返回错误。示例:
file, err := os.Create("output.txt")
if err != nil {
log.Fatal("无法创建文件:", err)
}
defer file.Close()
写入过程中的错误检查
调用 Write 或 WriteString 方法时,也应检查返回的错误,因为即使文件已成功打开,写入过程中仍可能发生问题(如磁盘空间不足)。
立即学习“go语言免费学习笔记(深入)”;
建议做法:
- 每次写入后检查 err
- 注意返回的字节数是否与预期一致
示例:
n, err := file.WriteString("Hello, World!\n")
if err != nil {
log.Fatal("写入失败:", err)
}
if n < len("Hello, World!\n") {
log.Println("警告:未完全写入数据")
}
使用 defer 和 sync 避免资源泄漏
写入完成后应调用 file.Close(),但关闭也可能出错。同时,为确保数据真正落盘,建议调用 file.Sync()。
正确模式:
file, err := os.Create("data.txt")
if err != nil {
log.Fatal(err)
}
defer func() {
if err = file.Close(); err != nil {
log.Println("关闭文件失败:", err)
}
}()
_, err = file.WriteString("重要数据")
if err != nil {
log.Fatal("写入失败:", err)
}
err = file.Sync()
if err != nil {
log.Fatal("同步到磁盘失败:", err)
}
基本上就这些。只要每一步都检查错误,并合理使用 defer 处理清理,就能写出安全可靠的文件写入代码。










