Go语言实战案例-向文件写入内容

在《Go语言100个实战案例》中 案例13:向文件写入内容 的完整内容,这是文件操作的另一个核心技能,与读取配套,适用于日志记录、生成报告、写配置等场景。


文件写入 | 文本输出 | 标准库实战


一、📘 案例目标

编写一个 Go 程序,将一段字符串内容写入到本地 .txt 文件中。若文件不存在则自动创建,存在则覆盖写入或追加写入。


二、🔍 应用场景示例

  • • 日志系统:写入运行记录、用户行为
  • • 自动生成报告:写结果到文件中
  • • 导出数据:如导出表格、文本分析报告
  • • 写配置文件或缓存

三、🔑 涉及知识点

知识点 说明
os.WriteFile 快捷写入整个内容
os.OpenFile 控制写入模式(创建/追加/覆盖)
defer 关闭文件 避免资源泄露
字符编码 Go 默认 UTF-8 支持中文无障碍

四、🛠 功能需求

    1. 将一段字符串写入指定文件;
    1. 自动创建新文件;
    1. 支持两种写入模式:覆盖写入 & 追加写入;
    1. 写入完成提示用户。

五、✅ 示例代码:覆盖写入(适合生成报告)

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 只写模式

八、💡 拓展建议

    1. 写入用户输入的内容(结合 fmt.Scanln);
    1. 支持文件名通过命令行参数指定;
    1. 每次写入自动记录时间戳;
    1. 写 JSON/CSV 文件(见后续案例);
    1. 实现简单的记事本工具或日志记录器;

🔚 小结

通过本案例你学会了:

✅ 如何创建并写入本地文件

✅ 快速写入 vs 控制写入模式

✅ 写入中文、自动编码无障碍

✅ 错误处理与资源释放的好习惯


相关推荐
灰子学技术9 分钟前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
Gogo8161 小时前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang1 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
毕设源码_廖学姐2 小时前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
mtngt113 小时前
AI DDD重构实践
go
野犬寒鸦3 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
逍遥德4 小时前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
MX_93595 小时前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
程序员泠零澪回家种桔子5 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
源代码•宸6 小时前
大厂技术岗面试之谈薪资
经验分享·后端·面试·职场和发展·golang·大厂·职级水平的薪资