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

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


一、打开与关闭文件

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

打开文件(只读):

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

创建文件(写入):

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

二、文件读取

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

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

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

css 复制代码
file, _ := os.Open("test.txt")
defer file.Close()

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

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

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

三、文件写入

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

css 复制代码
file, _ := os.Create("output.txt")
defer file.Close()

file.WriteString("Hello, Go!\n")
file.Write([]byte("Second line\n"))

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

css 复制代码
file, _ := os.Create("buffered.txt")
defer file.Close()

writer := bufio.NewWriter(file)
writer.WriteString("Buffered write\n")
writer.Flush() // 必须手动 flush

四、追加写入(os.OpenFile

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

lua 复制代码
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

css 复制代码
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

相关推荐
幽络源小助理18 分钟前
springboot校园车辆管理系统源码 – SpringBoot+Vue项目免费下载 | 幽络源
vue.js·spring boot·后端
刀法如飞20 分钟前
一款开箱即用的Spring Boot 4 DDD工程脚手架
java·后端·架构
uzong37 分钟前
后端系统设计文档模板
后端
幽络源小助理41 分钟前
SpringBoot+Vue车票管理系统源码下载 – 幽络源免费项目实战代码
vue.js·spring boot·后端
uzong1 小时前
软件架构指南 Software Architecture Guide
后端
又是忙碌的一天1 小时前
SpringBoot 创建及登录、拦截器
java·spring boot·后端
勇哥java实战分享2 小时前
短信平台 Pro 版本 ,比开源版本更强大
后端
学历真的很重要2 小时前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
计算机毕设VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue二手家电管理系统(源码+数据库+文档)
vue.js·spring boot·后端·课程设计
上进小菜猪3 小时前
基于 YOLOv8 的智能杂草检测识别实战 [目标检测完整源码]
后端