Go语言中的文件与IO:文件读写

简介: 本文介绍了 Go 语言中文件操作的基础方法,涵盖打开与关闭文件、读取和写入文件内容、追加写入以及复制文件等功能。通过 `os`、`bufio` 和 `io` 等标准库包,提供了高效且灵活的实现方式,如使用 `os.ReadFile` 读取整个文件、`bufio.Scanner` 逐行读取、`os.Create` 创建文件以及 `io.Copy` 复制文件内容。同时强调了错误处理的重要性,例如使用 `defer` 确保文件关闭,并推荐注意文件权限设置(如 UNIX 系统中的 `0644`)。最后以表格形式总结了常用操作及其推荐方法,便于快速查阅和应用。

 

在实际开发中,文件操作是常见需求之一。Go 标准库提供了强大的 osiobufioioutil(已废弃,推荐使用 os/io) 等包,支持高效的文件读写。


一、打开与关闭文件

Go 使用 os.Openos.Create 等函数操作文件。

打开文件(只读):

file, err := os.Open("test.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

创建文件(写入):

file, err := os.Create("output.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()
  • os.Create:若文件已存在则清空内容;不存在则创建。
  • defer file.Close():确保函数退出时关闭文件,释放资源。

二、文件读取

1. 读取整个文件内容(os.ReadFile):

data, err := os.ReadFile("test.txt")
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(data))

2. 逐行读取(bufio.Scanner):

file, _ := os.Open("test.txt")
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}
  • Scanner 适合按行读取大文件。
  • • 可以自定义分割符(如按词、段落等)。

3. 使用 Read 方法读取固定字节:

buf := make([]byte, 100)
n, err := file.Read(buf)
fmt.Printf("Read %d bytes: %s\n", n, buf[:n])

三、文件写入

1. 写入字符串或字节(WriteString / Write):

file, _ := os.Create("output.txt")
defer file.Close()
file.WriteString("Hello, Go!\n")
file.Write([]byte("Second line\n"))

2. 使用 bufio.Writer 缓冲写入:

file, _ := os.Create("buffered.txt")
defer file.Close()
writer := bufio.NewWriter(file)
writer.WriteString("Buffered write\n")
writer.Flush() // 必须手动 flush

四、追加写入(os.OpenFile

如果想向文件追加内容,可使用如下方式:

file, _ := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
defer file.Close()
file.WriteString("New log entry\n")
  • • 常见标志位:
  • os.O_RDONLY:只读
  • os.O_WRONLY:只写
  • os.O_RDWR:读写
  • os.O_APPEND:追加
  • os.O_CREATE:创建
  • os.O_TRUNC:清空原内容

五、复制文件内容(使用 io.Copy

src, _ := os.Open("src.txt")
dst, _ := os.Create("dst.txt")
defer src.Close()
defer dst.Close()
io.Copy(dst, src)
  • io.Copy 是复制文件内容的简洁高效方式。

六、常见错误处理技巧

  • • 一定要 关闭文件:使用 defer
  • • 检查 err:防止 panic。
  • • 注意文件权限,UNIX 系统中建议使用 0644

七、小结

操作 推荐方式
读完整文件 os.ReadFile
按行读取 bufio.Scanner
写文件 os.Create + Write / Writer
追加写入 os.OpenFile + O_APPEND
拷贝文件 io.Copy

 

相关文章
|
3月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
207 61
|
3月前
|
运维 网络协议 Go
Go网络编程:基于TCP的网络服务端与客户端
本文介绍了使用 Go 语言的 `net` 包开发 TCP 网络服务的基础与进阶内容。首先简述了 TCP 协议的基本概念和通信流程,接着详细讲解了服务端与客户端的开发步骤,并提供了简单回显服务的示例代码。同时,文章探讨了服务端并发处理连接的方法,以及粘包/拆包、异常检测、超时控制等进阶技巧。最后通过群聊服务端的实战案例巩固知识点,并总结了 TCP 在高可靠性场景中的优势及 Go 并发模型带来的便利性。
|
3月前
|
Go 开发者
Go语言包的组织与导入 -《Go语言实战指南》
本章详细介绍了Go语言中的包(Package)概念及其使用方法。包是实现代码模块化、复用性和可维护性的核心单位,内容涵盖包的基本定义、命名规则、组织结构以及导入方式。通过示例说明了如何创建和调用包,并深入讲解了`go.mod`文件对包路径的管理。此外,还提供了多种导入技巧,如别名导入、匿名导入等,帮助开发者优化代码结构与可读性。最后以表格形式总结了关键点,便于快速回顾和应用。
165 61
|
2月前
|
算法 Go
Go 语言泛型 — 泛型语法与示例
本文详解 Go 语言泛型语法与使用示例,涵盖泛型函数、类型声明、类型约束及实战应用,适合入门学习与开发实践。
|
4月前
|
Go 开发者
条件语句:if 与 switch -《Go语言实战指南》
本文介绍了 Go 语言中两种主要的条件语句:`if` 和 `switch`。`if` 语句包括基本语法、带 `else` 的写法、多分支 `else if` 以及支持初始化语句的功能。`switch` 语句则涵盖基本用法、匹配多个值、逻辑判断和 `fallthrough` 的使用。文章还提供了选择建议,帮助开发者根据场景决定使用哪种语句。总结指出,`if` 更灵活适合少量条件,而 `switch` 结构化更强,适合多分支判断。
|
4月前
|
Go
循环语句:for、range -《Go语言实战指南》
Go 语言使用 `for` 实现所有循环控制,无 `while` 和 `do...while`。支持经典三段式、条件判断(类似 `while`)、无限循环及 `range` 遍历数组、切片、字符串、map 和 channel。配合 `break` 和 `continue` 控制流程,字符串遍历按 Unicode 处理,避免乱码问题,map 遍历顺序随机。总结涵盖多种用法,灵活高效。
104 11
|
2月前
|
测试技术 Go 开发工具
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
Go语言项目工程化实践中的开发工具与CI/CD支持,涵盖格式化、静态检查、依赖管理、构建打包、自动化测试及部署策略。内容包括常用工具如gofmt、go vet、golangci-lint、Docker、GitHub Actions等,并提供实战建议与总结,提升团队协作效率与项目质量。
|
2月前
|
Go
Go语言实战案例-简易日志记录器
本案例实现一个简易日志记录器,演示如何在 Go 中打开/创建文件、追加写入文本并附加时间戳,帮助掌握文件操作与日志记录基础。
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
3月前
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。