欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > Go语言中的文件与IO:文件读写

Go语言中的文件与IO:文件读写

2025/6/21 4:57:46 来源:https://blog.csdn.net/tenkofx/article/details/148681277  浏览:    关键词:Go语言中的文件与IO:文件读写

在实际开发中,文件操作是常见需求之一。Go 标准库提供了强大的 osiobufio 和 ioutil(已废弃,推荐使用 os/io) 等包,支持高效的文件读写。


一、打开与关闭文件

Go 使用 os.Open 和 os.Create 等函数操作文件。

打开文件(只读):
file, err := os.Open("test.txt")
if err != nil {log.Fatal(err)
}
defer file.Close()
创建文件(写入):
file, err := os.Create("output.txt")
if err != nil {log.Fatal(err)
}
defer file.Close()
  • • os.Create:若文件已存在则清空内容;不存在则创建。
  • • defer file.Close():确保函数退出时关闭文件,释放资源。

二、文件读取

1. 读取整个文件内容(os.ReadFile):
data, err := os.ReadFile("test.txt")
if err != nil {log.Fatal(err)
}
fmt.Println(string(data))
2. 逐行读取(bufio.Scanner):
file, _ := os.Open("test.txt")
defer file.Close()scanner := bufio.NewScanner(file)
for scanner.Scan() {fmt.Println(scanner.Text())
}
  • • Scanner 适合按行读取大文件。
  • • 可以自定义分割符(如按词、段落等)。
3. 使用 Read 方法读取固定字节:
buf := make([]byte, 100)
n, err := file.Read(buf)
fmt.Printf("Read %d bytes: %s\n", n, buf[:n])

三、文件写入

1. 写入字符串或字节(WriteString / Write):
file, _ := os.Create("output.txt")
defer file.Close()file.WriteString("Hello, Go!\n")
file.Write([]byte("Second line\n"))
2. 使用 bufio.Writer 缓冲写入:
file, _ := os.Create("buffered.txt")
defer file.Close()writer := bufio.NewWriter(file)
writer.WriteString("Buffered write\n")
writer.Flush() // 必须手动 flush

四、追加写入(os.OpenFile

如果想向文件追加内容,可使用如下方式:

file, _ := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
defer file.Close()file.WriteString("New log entry\n")
  • • 常见标志位:
    • • os.O_RDONLY:只读
    • • os.O_WRONLY:只写
    • • os.O_RDWR:读写
    • • os.O_APPEND:追加
    • • os.O_CREATE:创建
    • • os.O_TRUNC:清空原内容

五、复制文件内容(使用 io.Copy

src, _ := os.Open("src.txt")
dst, _ := os.Create("dst.txt")
defer src.Close()
defer dst.Close()io.Copy(dst, src)
  • • io.Copy 是复制文件内容的简洁高效方式。

六、常见错误处理技巧

  • • 一定要 关闭文件:使用 defer
  • • 检查 err:防止 panic。
  • • 注意文件权限,UNIX 系统中建议使用 0644

七、小结

操作推荐方式
读完整文件os.ReadFile
按行读取bufio.Scanner
写文件os.Create + Write / Writer
追加写入os.OpenFile + O_APPEND
拷贝文件io.Copy

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词