Go语言文件操作教程:如何读取、写入和管理文件
为什么 Go 文件操作值得重点学习
在实际开发中,文件操作是非常常见的需求。比如读取配置文件、写日志、生成导出内容、处理上传文件、管理本地缓存,几乎都离不开对文件系统的读写操作。
Go 标准库为文件处理提供了比较完整的支持,常见功能主要集中在 os、bufio、io 等包中。相比一些需要第三方库才能方便处理文件的语言,Go 在这方面已经足够直接和实用。
对于 Go 初学者来说,掌握文件操作不仅有助于理解输入输出机制,也能为后面学习 Web 上传、日志系统、配置管理等内容打下基础。
Go如何读取文件内容
Go 读取文件的方式很多,最基础的一种是直接读取整个文件内容。
例如:
data, err := os.ReadFile("test.txt")
if err != nil {
fmt.Println("读取失败:", err)
return
}
fmt.Println(string(data))
这段代码会把整个文件一次性读入内存,然后转换成字符串输出。
这种方式适合读取较小的文本文件,比如配置文件、模板文件、JSON 数据等。如果文件很大,就不适合一次性全部读入,这时通常要使用缓冲读取的方式。
Go如何逐行读取文件
如果想逐行读取文本文件,可以使用 bufio.Scanner。
示例:
file, err := os.Open("test.txt")
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
这种方式特别适合读取日志文件、逐行解析文本内容等场景。相比一次性读取整份文件,它更加节省内存,也更适合处理大文件。
Go如何写入文件
如果要写入文件,可以直接使用 os.WriteFile。
例如:
content := []byte("这是 Go 写入的内容")
err := os.WriteFile("output.txt", content, 0666)
if err != nil {
fmt.Println("写入失败:", err)
return
}
fmt.Println("写入成功")
这种方式适合快速生成一个新文件或覆盖旧文件内容。
需要注意的是,如果目标文件已经存在,os.WriteFile 默认会覆盖原内容。如果你的需求是“追加写入”,就不能直接用这种方式。
Go如何追加写入文件
追加写入通常要先用 os.OpenFile 打开文件,并指定追加模式。
例如:
file, err := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
_, err = file.WriteString("追加一行日志内容\n")
if err != nil {
fmt.Println("写入失败:", err)
return
}
这里几个标志位的含义很重要:
os.O_APPEND表示追加模式os.O_CREATE表示文件不存在就创建os.O_WRONLY表示只写模式
这种写法在日志记录、运行状态存储等场景下很常用。
Go如何创建目录和判断文件是否存在
文件处理不只是读和写,还包括目录管理。
创建目录
err := os.Mkdir("mydir", 0755)
如果要递归创建多级目录,可以使用:
err := os.MkdirAll("a/b/c", 0755)
判断文件是否存在
_, err := os.Stat("test.txt")
if os.IsNotExist(err) {
fmt.Println("文件不存在")
}
这个判断在配置初始化、缓存文件检查、日志文件创建等场景中非常常见。
Go如何获取文件信息
有时我们需要知道文件大小、修改时间、是否是目录等信息,这时可以使用 os.Stat。
例如:
info, err := os.Stat("test.txt")
if err != nil {
fmt.Println("获取文件信息失败:", err)
return
}
fmt.Println("文件名:", info.Name())
fmt.Println("文件大小:", info.Size())
fmt.Println("是否目录:", info.IsDir())
fmt.Println("修改时间:", info.ModTime())
这些信息在文件上传校验、资源管理、备份系统等功能中都非常实用。
Go文件操作在项目中的常见应用
文件操作在 Go 开发中非常常见,尤其包括这些场景:
- 读取 JSON/YAML 配置文件
- 生成日志文件
- 上传文件保存到本地
- 导出 CSV、TXT、HTML 文件
- 静态资源检查
- 本地缓存和数据落盘
随着项目复杂度增加,文件处理逻辑往往会越来越常见,因此这一部分非常值得打牢。
Go文件操作学习时要注意什么
初学文件操作时,最容易忽略几个问题。
第一,打开文件后忘记关闭。
建议配合 defer file.Close() 使用,避免资源泄漏。
第二,不区分覆盖写入和追加写入。
这会导致原文件内容被误删。
第三,没有处理错误返回值。
Go 的文件操作几乎每一步都可能出错,必须认真判断 err。
第四,对大文件直接全部读取。
如果文件很大,一次性读入内存会影响性能,应考虑流式处理。
总结
Go语言的文件操作能力来自标准库,写法清晰、实用性强。无论是简单的文本读写,还是目录管理、日志追加、文件信息判断,Go 都提供了直接有效的解决方案。
对于 Go 初学者来说,文件操作是非常适合练手的一块内容。只要熟悉读取、写入、追加、目录创建和错误处理这些基础能力,后续做日志系统、配置加载、文件上传等项目功能时就会轻松很多。

浙公网安备 33010602011771号