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

简介: 本案例讲解如何使用 Go 语言向文件写入内容,涵盖覆盖写入与追加写入两种模式,适用于日志记录、报告生成等场景。涉及 `os.WriteFile`、`os.OpenFile` 等核心函数,并演示如何处理文件权限与编码问题。

 

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


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


一、📘 案例目标

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


二、🔍 应用场景示例

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

三、🔑 涉及知识点

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

四、🛠 功能需求

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

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

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语言!
这是一段写入文件的文本内容。

六、🚀 示例代码:追加写入(适合日志、历史记录)

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

🔚 小结

通过本案例你学会了:

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

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

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

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


 

相关文章
|
1月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
84 2
|
2月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
3月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
321 0
|
2月前
|
存储 前端开发 JavaScript
Go语言实战案例-项目实战篇:编写一个轻量级在线聊天室
本文介绍如何用Go语言从零实现一个轻量级在线聊天室,基于WebSocket实现实时通信,支持多人消息广播。涵盖前后端开发、技术选型与功能扩展,助你掌握Go高并发与实时通信核心技术。
|
3月前
|
负载均衡 监控 Java
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
在微服务架构中,高可用与稳定性至关重要。本文详解熔断、限流与负载均衡三大关键技术,结合API网关与Hystrix-Go实战,帮助构建健壮、弹性的微服务系统。
457 1
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
|
Go
Go实战(一)-概述
Go实战(一)-概述
165 0
Go实战(一)-概述
|
1月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
156 1
|
3月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
286 1
|
3月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
360 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
233 0