在《Go语言100个实战案例》中 案例13:向文件写入内容 的完整内容,这是文件操作的另一个核心技能,与读取配套,适用于日志记录、生成报告、写配置等场景。
文件写入 | 文本输出 | 标准库实战
一、📘 案例目标
编写一个 Go 程序,将一段字符串内容写入到本地 .txt
文件中。若文件不存在则自动创建,存在则覆盖写入或追加写入。
二、🔍 应用场景示例
- • 日志系统:写入运行记录、用户行为
- • 自动生成报告:写结果到文件中
- • 导出数据:如导出表格、文本分析报告
- • 写配置文件或缓存
三、🔑 涉及知识点
知识点 | 说明 |
---|---|
os.WriteFile |
快捷写入整个内容 |
os.OpenFile |
控制写入模式(创建/追加/覆盖) |
defer 关闭文件 |
避免资源泄露 |
字符编码 | Go 默认 UTF-8 支持中文无障碍 |
四、🛠 功能需求
-
- 将一段字符串写入指定文件;
-
- 自动创建新文件;
-
- 支持两种写入模式:覆盖写入 & 追加写入;
-
- 写入完成提示用户。
五、✅ 示例代码:覆盖写入(适合生成报告)
go
package main
import (
"fmt"
"os"
)
func main() {
content := "你好,Go语言!\n这是一段写入文件的文本内容。\n"
filename := "output.txt"
err := os.WriteFile(filename, []byte(content), 0644)
if err != nil {
fmt.Println("写入文件失败:", err)
return
}
fmt.Println("内容已成功写入文件:", filename)
}
📂 执行后,会在当前目录生成 output.txt
文件,内容如下:
你好,Go语言!
这是一段写入文件的文本内容。
六、🚀 示例代码:追加写入(适合日志、历史记录)
go
package main
import (
"fmt"
"os"
)
func main() {
filename := "log.txt"
content := "【INFO】程序运行于:" + timeNow() + "\n"
// 打开文件并设置为追加写入模式
file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
_, err = file.WriteString(content)
if err != nil {
fmt.Println("写入失败:", err)
return
}
fmt.Println("追加写入成功:", content)
}
// 获取当前时间
func timeNow() string {
return fmt.Sprintf("%s", os.Getenv("TZ")) // 或 time.Now().Format("2006-01-02 15:04:05")
}
📝 日志会被追加到 log.txt
文件末尾。
七、📌 权限解释
权限模式 | 含义 |
---|---|
0644 |
所有者可读写,其他用户只读 |
0666 |
所有人可读写(不推荐) |
os.O_CREATE |
文件不存在时创建 |
os.O_APPEND |
写入追加到末尾 |
os.O_WRONLY |
只写模式 |
八、💡 拓展建议
-
- 写入用户输入的内容(结合
fmt.Scanln
);
- 写入用户输入的内容(结合
-
- 支持文件名通过命令行参数指定;
-
- 每次写入自动记录时间戳;
-
- 写 JSON/CSV 文件(见后续案例);
-
- 实现简单的记事本工具或日志记录器;
🔚 小结
通过本案例你学会了:
✅ 如何创建并写入本地文件
✅ 快速写入 vs 控制写入模式
✅ 写入中文、自动编码无障碍
✅ 错误处理与资源释放的好习惯