Go语言文件操作指南:从读取到写入

2025-05发布5次浏览

Go语言作为一种高效、简洁的编程语言,提供了丰富的文件操作功能。从简单的文件读取到复杂的写入操作,Go语言都给予了开发者极大的灵活性和便利性。本文将详细介绍如何在Go语言中进行文件的基本操作,包括文件的读取、写入以及相关高级操作。

文件的基本操作

1. 打开文件

在Go语言中,可以使用os.Open函数打开一个文件用于读取,或使用os.Create创建一个新的文件用于写入。这些函数返回一个*os.File类型的值和可能的错误信息。

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

2. 读取文件内容

读取文件可以通过多种方式实现,例如使用io.ReadAll一次性读取整个文件,或者使用bufio.Scanner逐行读取。

使用io.ReadAll
data, err := io.ReadAll(file)
if err != nil {
    log.Fatal(err)
}
fmt.Print(string(data))
使用bufio.Scanner
scanner := bufio.NewScanner(file)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}

if err := scanner.Err(); err != nil {
    log.Fatal(err)
}

3. 写入文件

写入文件时,可以使用os.Create创建新文件,并通过io.WriteStringfmt.Fprintf等方法写入数据。

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

if _, err := io.WriteString(file, "Hello, Go!\n"); err != nil {
    log.Fatal(err)
}

高级文件操作

1. 文件复制

文件复制可以通过读取源文件并将其内容写入目标文件来实现。

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

dst, err := os.Create("destination.txt")
if err != nil {
    log.Fatal(err)
}
defer dst.Close()

if _, err := io.Copy(dst, src); err != nil {
    log.Fatal(err)
}

2. 文件重命名与删除

使用os.Renameos.Remove函数可以轻松地对文件进行重命名和删除操作。

err := os.Rename("oldname.txt", "newname.txt")
if err != nil {
    log.Fatal(err)
}

err = os.Remove("newname.txt")
if err != nil {
    log.Fatal(err)
}

文件操作流程图

为了更直观地理解文件操作的流程,下面提供了一个简单的流程图:

graph TD;
    A[开始] --> B{选择操作};
    B -->|读取| C[打开文件];
    B -->|写入| D[创建/打开文件];
    C --> E[读取文件内容];
    D --> F[写入文件内容];
    E --> G[关闭文件];
    F --> H[关闭文件];
    G --> I[结束];
    H --> I;