Go 编程 | 连载 30 - 文件 I/O

简介: Go 编程 | 连载 30 - 文件 I/O

一、文件读写

Go 中提供了 ioutil 标准库来进行文件读写操作,使用该标准库进行文件读写无须进行关闭操作,该标准库可以完成如下操作:

  • 读取文件
  • 列出指定目录的内容
  • 创建文件
  • 写入文件
  • 创建临时目录
  • 创建临时文件

文件读取

ioutil 标准库下的 Readfile 函数可以以字节切片的方式读取返回文件的内容,因此在结果返回后仍然需要调用 string 内置函数将字节切片转换成字符串。

首先在项目目录下新建一个 info.txt 文件,并输入内容。

package main
import (
   "fmt"
   "io/ioutil"
   "log"
)
func main(){
   byteContent, err := ioutil.ReadFile("info.txt")
   if err != nil {
      log.Fatal(err)
   }
   fmt.Println(string(byteContent))
}
复制代码

执行上述代码,输出结果如下:

Go is expressive, concise, clean, and efficient.
Its concurrency mechanisms make it easy to write
programs that get the most out of multicore and networked machines,
while its novel type system enables flexible and modular program construction.
复制代码

输出结果与 info.txt 中的内容一致

image.png

使用 ReadFile 函数读取文件之后无须关闭文件,因为 ioutil 标准库几乎就是 os 模块的包装器,可以使用极少的代码完成文件读写,而且无须关系操作之后的关闭操作。

文件创建与写入

WriteFile 函数可以写入内容到文件,当文件不存在时可以创建文件,该函数接收三个参数,第一个是文件名,第二个参数是写入内容,第三个参数是文件的权限。

WriteFile 函数写入文件内容也是以字节切片的形式写入的

package main
import (
   "io/ioutil"
   "log"
)
func main(){
   intro := "The Go programming language is an open source project to make programmers more productive."
   err := ioutil.WriteFile("go_intro.txt", []byte(intro), 0777)
   if err != nil {
      log.Fatal(err)
   }
}
复制代码

执行上述代码后,可以发现在项目目录中多处一个 go_intro.txt 文件

image.png

现在我们将写入的目标文件改为已存在的 info.txt,再次执行代码,查看 info.txt 文件

image.png

可以发现,文件内容已经被替换。

WriteFile 函数的第三个参数表示文件的权限,部分常用的权限符号表示和数字表示如下:

权限符号表示 权限数字表示 权限说明
---------- 0000 无权限
-rwx------- 0700 只有所有者能够读取、写入和执行
-rwxrwx--- 0700 所有者及其所在的用户组能够读取、写入和执行
-rwxrwxrwx 0700 所有人都能够读取、写入和执行
---x--x--x 0111 所有人都能够执行
--w--w--w- 0222 所有人都能够写入
--wx-wx-wx 0333 所有人都能够写入和执行
-r--r--r-- 0444 所有人都能够读取
-r-xr-xr-x 0555 所有人都能够读取和执行
-rw-rw-rw- 0666 所有人都能够读取和写入
-rwxr----- 0740 所有者能够读取、写入和执行,而所有者所在的用户组能够读取


相关文章
|
2月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
90 2
|
3月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
5月前
|
数据采集 JSON 自然语言处理
Go语言实战案例-统计文件中每个字母出现频率
《Go语言100个实战案例》中的“文件与IO操作篇 - 案例19”教你如何统计文本文件中每个英文字母的出现频率。通过实战练习,掌握文件读取、字符处理、map统计等基础技能,适合Go语言初学者提升编程能力。
|
5月前
|
数据采集 Go
Go语言实战案例-批量重命名文件
《Go语言100个实战案例》中的“文件与IO操作篇 - 案例17:批量重命名文件”,适合初学者学习使用 Go 操作文件系统,实现文件批量重命名功能,包括添加前缀、后缀或编号等。
|
5月前
|
JSON 缓存 Go
Go语言实战案例-向文件写入内容
本案例讲解如何使用 Go 语言向文件写入内容,涵盖覆盖写入与追加写入两种模式,适用于日志记录、报告生成等场景。涉及 `os.WriteFile`、`os.OpenFile` 等核心函数,并演示如何处理文件权限与编码问题。
|
5月前
|
Go 开发工具 git
Go语言实战案例-遍历目录下所有文件
本案例讲解如何使用 Go 语言递归遍历目录及其子目录中的所有文件。通过 `filepath.WalkDir` 函数实现目录遍历,涵盖文件判断、路径获取和错误处理等知识点,适用于文件管理、批量处理和查找特定类型文件等场景。
|
6月前
|
XML JSON Go
Go语言中的文件与IO:JSON、CSV、XML处理
本文介绍了 Go 语言中对 JSON、CSV 和 XML 三种常见数据格式的处理方法。通过标准库 `encoding/json`、`encoding/csv` 和 `encoding/xml`,可以实现结构体与数据格式之间的序列化与反序列化。JSON 适合 Web API 和前后端通信,因其清晰易读;CSV 适用于表格数据和轻量级交换;XML 则支持复杂嵌套结构,常用于配置文件和 SOAP 协议。文中提供代码示例,涵盖基本使用、嵌套结构处理及实战建议,帮助开发者高效操作这些格式。
|
6月前
|
Unix Go
Go语言中的文件与IO:文件读写
本文介绍了 Go 语言中文件操作的基础方法,涵盖打开与关闭文件、读取和写入文件内容、追加写入以及复制文件等功能。通过 `os`、`bufio` 和 `io` 等标准库包,提供了高效且灵活的实现方式,如使用 `os.ReadFile` 读取整个文件、`bufio.Scanner` 逐行读取、`os.Create` 创建文件以及 `io.Copy` 复制文件内容。同时强调了错误处理的重要性,例如使用 `defer` 确保文件关闭,并推荐注意文件权限设置(如 UNIX 系统中的 `0644`)。最后以表格形式总结了常用操作及其推荐方法,便于快速查阅和应用。
|
6月前
|
Go 数据处理
Go语言中的文件与IO:bufio 和 scanner
Go 标准库中的 `bufio` 包高效读写功能,适用于文件和数据处理。`bufio.Reader` 支持按行或分隔符读取,`bufio.Writer` 提供高性能写入并需调用 `Flush()` 确保数据写入。`bufio.Scanner` 是处理文本文件(如日志、配置)的利器,可按行、单词等分割内容。本文详解其用法,并给出实践建议,如统计字符数、模拟 `tail -f` 和词频分析等。
|
7月前
|
设计模式 缓存 算法
Go如何进行高质量编程与性能调优实践
本文介绍了Go语言高质量编程与性能调优的实践方法。高质量编程包括良好的编码习惯(如清晰注释、命名规范)、代码风格与设计(如MVC模式)、简洁明了的代码原则,以及单元测试与代码重构的重要性。性能调优方面,涵盖算法优化、数据结构选择、I/O优化、内存管理、并行与并发处理优化及代码层面的改进。通过这些方法,可有效提升代码质量和系统性能。
152 13