Go 语言文件读写入门:os、bufio 与 ioutil 实战
在 Go 开发初期,文件操作是绕不开的基础环节。虽然标准库功能强大,但面对 os、bufio 和 ioutil 这几个包时,新手往往容易混淆它们的适用场景。今天我们就通过一段实战代码,把这几者的用法理清楚。
核心代码实现
下面是一个完整的示例,展示了如何打开文件、写入数据,然后读取回来。注意这里修正了原代码中权限设置的误区。
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
// 1. 打开或创建文件
// 使用 os.O_RDWR|os.O_APPEND|os.O_CREATE 组合标志
// 权限设置为 0644,而不是 os.ModeType(那是文件类型位)
file, err := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
panic(err)
}
defer file.Close()
// 2. 写入数据
data := []byte("Hello Go File I/O\n第二行测试\n")
_, err = file.Write(data)
if err != nil {
panic(err)
}
// 3. 读取数据
// 因为刚才写入了数据,指针在末尾,需要重置到开头才能读到内容
_, err = file.Seek(0, 0)
if err != nil {
panic(err)
}
content, err := ioutil.ReadAll(file)
if err != nil {
panic(err)
}
fmt.Printf("%s", string(content))
}
关键点解析
关于权限设置
很多初学者会误用 os.ModeType 作为权限参数,这在 OpenFile 中是无效的。正确的做法是使用八进制数字如 ,或者预定义的常量 。

