当前位置: 首页 > news >正文

Go语言的文件处理操作

文件处理是编程中最常用的功能之一,无论是读取配置、写入日志、处理文本,还是数据存储,都离不开文件操作。Go 语言提供了非常简洁、强大的标准库来完成文件的创建、读写、复制、删除、判断等操作,最核心的包是osio/ioutil(Go 1.16 后推荐使用osio)。

本文从最基础到最常用,一步步讲解,代码可直接复制运行,适合作业、考试、实战使用。


一、文件操作必备包

Go 语言文件操作主要使用 3 个包:

  1. os:文件打开、创建、删除、权限、状态判断
  2. bufio:带缓冲的读写(高效读写大文件)
  3. io:基础读写接口
  4. path/filepath:路径处理(跨平台)

二、文件打开与关闭

1. 打开文件(os.Open)

file, err := os.Open("test.txt")

作用:以只读方式打开文件。

2. 创建文件(os.Create)

file, err := os.Create("test.txt")

作用:创建新文件,若文件已存在则清空内容。

3. 打开文件并指定模式(os.OpenFile)

最强大的打开方式,可指定:

  • 只读
  • 只写
  • 追加
  • 读写
file, err := os.OpenFile("test.txt", os.O_APPEND|os.O_WRONLY, 0666)

常用模式:

  • os.O_RDONLY:只读
  • os.O_WRONLY:只写
  • os.O_RDWR:读写
  • os.O_CREATE:不存在则创建
  • os.O_APPEND:追加写
  • os.O_TRUNC:清空文件

4. 关闭文件(defer file.Close ())

文件打开后必须关闭,否则会造成资源泄漏。固定写法:

file, err := os.Open("test.txt") if err != nil { fmt.Println("打开失败:", err) return } defer file.Close() // 自动关闭

三、文件读取操作(4 种常用方法)

1. 一次性读取全部内容(最简单)

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

优点:代码少,适合小文件。


2. 按字节读取

buf := make([]byte, 1024) n, _ := file.Read(buf) fmt.Println("读取字节数:", n) fmt.Println("内容:", string(buf[:n]))

3. 按行读取(最常用,适合大文件)

使用bufio.Scanner按行读取:

file, _ := os.Open("test.txt") defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() fmt.Println(line) }

4. 带缓冲读取(高效读取大文件)

reader := bufio.NewReader(file) buf := make([]byte, 1024) reader.Read(buf)

四、文件写入操作

1. 一次性写入(最简单)

content := "Hello Go 文件操作" err := os.WriteFile("test.txt", []byte(content), 0666)

特点:覆盖原有内容。


2. 追加写入

必须使用OpenFile并指定追加模式:

file, err := os.OpenFile("test.txt", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0666) defer file.Close() file.WriteString("我是追加的内容\n")

3. 缓冲写入(高效写入)

writer := bufio.NewWriter(file) writer.WriteString("使用缓冲写入\n") writer.Flush() // 必须刷新才会真正写入文件

五、文件常用操作

1. 判断文件是否存在

_, err := os.Stat("test.txt") if os.IsNotExist(err) { fmt.Println("文件不存在") } else { fmt.Println("文件存在") }

2. 删除文件

err := os.Remove("test.txt")

3. 获取文件信息

info, _ := os.Stat("test.txt") fmt.Println("文件名:", info.Name()) fmt.Println("文件大小:", info.Size()) fmt.Println("是否是目录:", info.IsDir()) fmt.Println("修改时间:", info.ModTime())

4. 创建目录

os.Mkdir("test", 0777) // 创建单个目录 os.MkdirAll("a/b/c", 0777) // 递归创建多级目录

5. 遍历目录

files, _ := os.ReadDir(".") for _, file := range files { fmt.Println(file.Name()) }

六、文件复制

src, _ := os.Open("src.txt") dst, _ := os.Create("dst.txt") defer src.Close() defer dst.Close() io.Copy(dst, src)

七、文件操作易错点总结

  1. 打开文件必须判断错误,否则文件不存在会崩溃
  2. 必须 defer file.Close ()关闭文件
  3. 缓冲写入必须调用Flush()
  4. 追加写入必须使用os.O_APPEND模式
  5. 小文件用ReadFile/WriteFile,大文件用bufio
  6. 跨平台路径使用filepath.Join()

八、完整示例:读写小文件

package main import "os" func main() { // 写入 os.WriteFile("test.txt", []byte("Go语言文件操作"), 0666) // 读取 content, _ := os.ReadFile("test.txt") println(string(content)) }
http://www.jsqmd.com/news/674508/

相关文章:

  • 可学习上采样方法改进YOLOv5特征图恢复:从原理到实战全解析
  • Display Driver Uninstaller终极指南:5步彻底解决显卡驱动安装难题
  • 头歌操作系统课后作业2.1
  • MySQL 索引命中机制详解
  • 追忆李商隐加密此情到惘然
  • 2026年质量好的草坪砖/四川透水砖公司哪家好 - 行业平台推荐
  • 用 BAPI 打通 SAP Gateway OData 服务,经典 SEGW 路线一次讲透
  • 每天 700 次开合跳,2 个月暴瘦一圈!在家就能练的燃脂神器
  • 2026年伺服电爪供应商选择,伺服电爪性能保障体系 - 品牌2026
  • 手把手教你用WAN2.2生成视频:SDXL风格节点详解,小白也能出片
  • SeanLib系列函数库-MyFlash
  • 30岁测试工程师的焦虑!
  • 扫频正弦啁啾信号在音频测量中的优势与应用
  • 因果AI:用户增长领域的“决策透视镜”
  • 异步编程中的高效数据过滤
  • Droplt进阶玩法:不止按后缀分类,教你用‘协议’实现更智能的文件自动化流程
  • Dify多模态工作流卡顿故障排查手册(附12个真实生产环境Debug日志片段)
  • C语言学习笔记6
  • 2026年比较好的帆布袋厂家对比推荐 - 品牌宣传支持者
  • X-World:小鹏面向规模化端到端自动驾驶的可控自车中心多相机世界模型
  • 如何选择Embedding模型
  • 魔兽争霸III优化终极指南:免费开源插件WarcraftHelper完全配置教程
  • Linux驱动-IMX6ULL开发板qemu环境搭建
  • 别再乱用Mybatis-Plus的@TableField了!5种FieldStrategy实战避坑指南(附Spring Boot配置)
  • 2026年口碑好的帆布袋定制/高质量帆布袋厂家精选合集 - 行业平台推荐
  • jQuery 遍历 - 后代
  • 把 ABAP 变体真正用活,动态保存、加载与删除的一套做法
  • 前端交互性能优化实例
  • 国产异步SRAM单片机外扩专用存储芯片
  • 鹿城靠谱的短视频公司