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 控制写入模式

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

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


 

相关文章
|
8天前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
2月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
163 0
|
11天前
|
存储 前端开发 JavaScript
Go语言实战案例-项目实战篇:编写一个轻量级在线聊天室
本文介绍如何用Go语言从零实现一个轻量级在线聊天室,基于WebSocket实现实时通信,支持多人消息广播。涵盖前后端开发、技术选型与功能扩展,助你掌握Go高并发与实时通信核心技术。
|
2月前
|
负载均衡 监控 Java
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
在微服务架构中,高可用与稳定性至关重要。本文详解熔断、限流与负载均衡三大关键技术,结合API网关与Hystrix-Go实战,帮助构建健壮、弹性的微服务系统。
251 1
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
|
2月前
|
安全 Go 开发者
Go语言实战案例:使用sync.Mutex实现资源加锁
在Go语言并发编程中,数据共享可能导致竞态条件,使用 `sync.Mutex` 可以有效避免这一问题。本文详细介绍了互斥锁的基本概念、加锁原理及实战应用,通过构建并发安全的计数器演示了加锁与未加锁的区别,并封装了一个线程安全的计数器结构。同时对比了Go中常见的同步机制,帮助开发者理解何时应使用 `Mutex` 及其注意事项。掌握 `Mutex` 是实现高效、安全并发编程的重要基础。
|
Go
Go实战(一)-概述
Go实战(一)-概述
155 0
Go实战(一)-概述
|
8月前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
8月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
2月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
2月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。