Go-文件读写与IO

1. os 包中的文件操作

1.1 创建文件

在 Go 语言中,我们可以使用 os.Create 函数来创建文件。该函数会返回一个 *os.File 指针,
我们可以通过它进行后续的文件操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import (
"fmt"
"os"
)

func main() {
file, err := os.Create("example.txt")
if err != nil {
fmt.Println("文件创建失败:", err)
return
}
defer file.Close()
fmt.Println("文件创建成功")
}

1.2 打开文件

使用 os.Open 可以打开一个已存在的文件,该函数返回一个只读文件指针;如果文件不存在,会返回错误。

1
2
3
4
5
6
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("文件打开失败:", err)
return
}
defer file.Close()

而如果想要读写模式打开文件,我们可以使用 os.OpenFile,并通过 os.O_RDWR 设定权限。

1
file, err := os.OpenFile("example.txt", os.O_RDWR, 0644)

1.3 删除文件

我们可以使用 os.Remove 来删除文件,十分简便。

1
2
3
4
5
6
err := os.Remove("example.txt")
if err != nil {
fmt.Println("删除文件失败:", err)
return
}
fmt.Println("文件删除成功")

2. 使用 io 包进行读写操作

2.1 写入文件

有了文件指针后,我们可以使用 Write 方法向文件写入数据。比如:

1
2
3
4
file, _ := os.Create("data.txt")
defer file.Close()

file.Write([]byte("Hello, Go!"))

我们也可以使用 io.WriteString 函数来直接写入字符串。

1
2
import "io"
io.WriteString(file, "Hello, Go! 通过 io 包写入字符串")

2.2 读取文件

读取文件可以使用 file.Read,该方法会将文件内容读入一个字节切片。

1
2
3
4
5
6
7
8
9
10
file, _ := os.Open("data.txt")
defer file.Close()

data := make([]byte, 100)
count, err := file.Read(data)
if err != nil {
fmt.Println("读取文件失败:", err)
}
fmt.Printf("读取了 %d 字节: %s
", count, string(data))

2.3 使用 bufio 提高读取效率

在处理大文件时,我们可以用 bufio.NewReader 提高读取效率。

1
2
3
4
5
6
7
8
9
10
11
12
13
import (
"bufio"
"fmt"
"os"
)

file, _ := os.Open("data.txt")
defer file.Close()

reader := bufio.NewReader(file)
line, _ := reader.ReadString('
')
fmt.Println("读取一行:", line)

3. 错误处理与文件权限控制

在进行文件操作时,错误处理尤为重要。Go 语言提倡显式的错误检查,避免程序在未预料的情况下崩溃。
此外,os.OpenFile 中的第三个参数可以设置文件权限,例如 0644 表示所有者有读写权限,
而组和其他人只有读取权限。

4. 实用技巧与注意事项

  • 文件关闭:使用 defer file.Close() 确保文件操作后会被正确关闭。
  • 权限控制:在多人协作的项目中,合理设置文件权限可以提高安全性。
  • 错误检查:及时捕获并处理错误,有助于提升程序健壮性。