发布于2026-07-06 阅读(0)
扫一扫,手机访问
在Linux环境下用Golang处理文件,其实是每个后端开发者都会频繁遇到的场景。无论是日志写入、配置文件读取,还是简单的文件复制,底层逻辑都绕不开创建、打开、读写、关闭这几个基础操作。下面整理了一套完整的代码示例,直接可以拿去用——当然,实际项目中还需要根据业务做异常处理优化,但理解核心流程是第一步。

package main
import (
"fmt"
"io/ioutil"
"os"
)
os包负责底层的系统调用,io/ioutil提供了便捷的读写函数,fmt则是调试输出用的。这三个包基本能覆盖日常90%的文件操作需求。
func createFile(filename string) error {
file, err := os.Create(filename)
if err != nil {
return err
}
defer file.Close()
return nil
}
os.Create会创建或截断文件,如果文件已存在,内容会被清空。注意这里用defer确保文件关闭,防止资源泄漏——这是Go语言最优雅的地方之一。
func openFile(filename string) (*os.File, error) {
file, err := os.Open(filename)
if err != nil {
return nil, err
}
return file, nil
}
只读打开用os.Open,如果需要读写或追加模式,可以改用os.OpenFile配合os.O_RDWR或os.O_APPEND等标志位。
func readFile(filename string) ([]byte, error) {
data, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
return data, nil
}
ioutil.ReadFile是一次性将整个文件读入内存,适合小文件。对于大文件,更推荐用bufio或os.File.Read分批读取。
func writeFile(filename string, data []byte) error {
err := ioutil.WriteFile(filename, data, 0644)
if err != nil {
return err
}
return nil
}
0644是典型的文件权限:所有者可读写,组用户和其他用户只读。如果你需要追加写入,可以先用os.OpenFile以追加模式打开,再调用Write方法。
func closeFile(file *os.File) error {
err := file.Close()
if err != nil {
return err
}
return nil
}
大多数情况下直接用defer file.Close()即可,单独封装一个函数主要是为了统一错误处理。
func copyFile(src, dest string) error {
srcFile, err := openFile(src)
if err != nil {
return err
}
defer closeFile(srcFile)
destFile, err := createFile(dest)
if err != nil {
return err
}
defer closeFile(destFile)
buf := make([]byte, 1024)
for {
n, err := srcFile.Read(buf)
if err != nil {
if err == io.EOF {
break
}
return err
}
if n == 0 {
break
}
_, err = destFile.Write(buf[:n])
if err != nil {
return err
}
}
return nil
}
这个复制函数使用1024字节的缓冲区,逐块读写,避免了ioutil.ReadFile一次性加载大文件的内存压力。实际生产环境还可以改用io.Copy来进一步简化。
以上就是在Linux环境下用Golang处理文件的基本操作流程。掌握这几个核心函数,再结合目录遍历、文件权限判断等常见需求,你就能灵活应对大部分文件处理场景。如果遇到更复杂的场景(比如并发写入、文件锁),可以进一步研究os包中的高级API。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8