Go语言文件系统操作完全指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Go 语言文件系统操作:从基础到进阶技巧



Go (Golang) 是一种以简洁性和高性能著称的现代编程语言。开发者经常面临的关键任务之一就是文件系统操作。本文将详细讲解如何在 Go 中创建、读取、写入文件,管理目录以及处理路径。您将获得实用的代码示例,帮助您快速高效地掌握文件操作。



文件系统操作的核心包



在 Go 中,文件系统操作主要集中在标准库的三个核心包中:

  • os — 基本操作:打开、创建、删除文件和目录。
  • io 和 io/ioutil — 数据读写(在较新版本的 Go 中,建议使用 os 替代 ioutil)。
  • path/filepath — 路径操作:拼接、拆分、获取扩展名。


开始操作前,请确保已导入必要的包:

package main

import ( "fmt" "os" "io" "path/filepath")


Go 中的文件读写



读取整个文件

最简单的读取文件方式是使用 os.ReadFile 函数(自 Go 1.16 起可用)。它返回字节切片和错误信息。

func readFileExample() {    data, err := os.ReadFile("example.txt")    if err != nil {        fmt.Println("读取文件错误:", err)        return    }    fmt.Println(string(data))}


写入文件

使用 os.WriteFile 将数据写入文件。如果文件不存在,则创建;如果存在,则覆盖。

func writeFileExample() {    content := []byte("你好,世界!第二行。") // 注意:原文为俄语,此处按中文习惯调整示例文本    err := os.WriteFile("output.txt", content, 0644)    if err != nil {        fmt.Println("写入错误:", err)        return    }    fmt.Println("文件写入成功")}


逐行读取大文件

处理大文件时,最好使用缓冲读取,避免将整个文件加载到内存中。

import "bufio"

func readLineByLine() { file, err := os.Open("large_file.txt") if err != nil { fmt.Println("打开文件错误:", err) return } defer file.Close()

scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() fmt.Println(line) } if err := scanner.Err(); err != nil { fmt.Println("扫描错误:", err) }}


Go 中的目录操作



创建和删除目录

使用 os.Mkdir 创建单个目录,使用 os.MkdirAll 创建嵌套目录。

func createDirectories() {    // 创建一个文件夹    err := os.Mkdir("mydir", 0755)    if err != nil {        fmt.Println("创建文件夹错误:", err)    }

// 创建嵌套结构 err = os.MkdirAll("path/to/nested/dir", 0755) if err != nil { fmt.Println("创建嵌套文件夹错误:", err) }}


使用 os.Remove(删除空目录)和 os.RemoveAll(删除非空目录)来删除目录。

func removeDirectories() {    // 删除空文件夹    err := os.Remove("mydir")    if err != nil {        fmt.Println("删除错误:", err)    }

// 删除文件夹及其所有内容 err = os.RemoveAll("path/to") if err != nil { fmt.Println("递归删除错误:", err) }}


读取目录内容

os.ReadDir 函数返回目录中的条目列表。



                
                

博客

书籍推荐