全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-14 7 分钟 ✍️ juanwangdev

Go os包

Go标准库os提供与操作系统交互的接口。

文件操作

创建文件

Go
import "os"

// 创建文件
file, err := os.Create("test.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

// Create会覆盖已存在的文件

打开文件

Go
// 只读打开
file, err := os.Open("test.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

// 指定模式打开
file, err := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE, 0644)

OpenFile模式常量

常量含义
O_RDONLY只读
O_WRONLY只写
O_RDWR读写
O_CREATE创建(不存在时)
O_APPEND追加
O_TRUNC清空文件
O_EXCL独占创建

读写文件

Go
// 写入
file.Write([]byte("hello"))
file.WriteString("world")

// 读取
buf := make([]byte, 100)
n, _ := file.Read(buf)
fmt.Println(buf[:n])

// 按位置读取
n, _ := file.ReadAt(buf, 0)

ReadFile/WriteFile

Go
// 一次性读取文件
data, err := os.ReadFile("test.txt")
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(data))

// 一次性写入文件
err := os.WriteFile("test.txt", []byte("hello"), 0644)

ReadFile和WriteFile是简化操作,适合小文件。

文件信息

Stat获取信息

Go
info, err := os.Stat("test.txt")
if err != nil {
    log.Fatal(err)
}

fmt.Println(info.Name())    // 文件名
fmt.Println(info.Size())    // 文件大小
fmt.Println(info.Mode())    // 文件模式
fmt.Println(info.ModTime()) // 修改时间
fmt.Println(info.IsDir())   // 是否目录

IsNotExist判断

Go
if os.IsNotExist(err) {
    fmt.Println("文件不存在")
}

if os.IsExist(err) {
    fmt.Println("文件已存在")
}

目录操作

创建目录

Go
// 创建单层目录
os.Mkdir("dir1", 0755)

// 创建多层目录
os.MkdirAll("dir1/dir2/dir3", 0755)

// MkdirAll自动创建所有层级

读取目录

Go
// 读取目录内容
entries, _ := os.ReadDir(".")
for _, entry := entries {
    fmt.Println(entry.Name(), entry.IsDir())
}

删除目录

Go
// 删除空目录
os.Remove("dir1")

// 删除目录及内容
os.RemoveAll("dir1")  // 删除所有内容

// RemoveAll递归删除

文件删除与重命名

Remove函数

Go
// 删除文件
os.Remove("test.txt")

// 删除空目录
os.Remove("empty_dir")

Rename函数

Go
// 重命名文件
os.Rename("old.txt", "new.txt")

// 移动文件
os.Rename("file.txt", "dir/file.txt")

环境变量

读取环境变量

Go
// 读取变量
path := os.Getenv("PATH")

// 安全读取(区分不存在)
val, exists := os.LookupEnv("MY_VAR")
if !exists {
    fmt.Println("不存在")
}

设置环境变量

Go
// 设置变量
os.Setenv("MY_VAR", "value")

// 删除变量
os.Unsetenv("MY_VAR")

// 清除所有变量
os.Clearenv()

// 获取所有变量
envs := os.Environ()  // []string

进程信息

os.Args

Go
// 命令行参数
fmt.Println(os.Args)      // 所有参数
fmt.Println(os.Args[0])   // 程序名
fmt.Println(os.Args[1:])  // 参数列表

进程ID

Go
// 当前进程ID
pid := os.Getpid()

// 父进程ID
ppid := os.Getppid()

// 当前用户ID
uid := os.Getuid()

// 当前组ID
gid := os.Getgid()

工作目录

Go
// 获取工作目录
dir, _ := os.Getwd()

// 改变工作目录
os.Chdir("/tmp")

进程控制

os.Exit

Go
// 立即退出进程
os.Exit(0)   // 正常退出
os.Exit(1)   // 异常退出

// Exit不会执行defer

执行命令

Go
import "os/exec"

cmd := exec.Command("ls", "-la")
output, _ := cmd.Output()
fmt.Println(output)

cmd.Run()    // 执行不获取输出
cmd.Start()  // 启动进程
cmd.Wait()   // 等待完成

用户和主机信息

Go
// 获取主机名
hostname, _ := os.Hostname()

// 获取当前用户
user, _ := user.Current()
fmt.Println(user.Username)
fmt.Println(user.HomeDir)

文件权限

权限模式

Go
// 权限位
0644  // 用户读写,组读,其他读
0755  // 用户读写执行,组读执行,其他读执行
0777  // 全权限
0600  // 仅用户读写

chmod修改权限

Go
// 修改权限
os.Chmod("test.txt", 0644)

// Unix/Linux权限表示

临时文件

os.TempDir

Go
// 获取临时目录
tempDir := os.TempDir()

// 创建临时文件
file, _ := os.CreateTemp("", "prefix-*.txt")
defer os.Remove(file.Name())

// 创建临时目录
dir, _ := os.MkdirTemp("", "prefix-")
defer os.RemoveAll(dir)

标准输入输出

Go
// 标准输入
os.Stdin

// 标准输出
os.Stdout

// 标准错误
os.Stderr

// 使用
fmt.Fprintln(os.Stdout, "hello")
fmt.Fprintln(os.Stderr, "error")

常用函数表

函数用途返回值
Create创建文件File, err
Open打开文件File, err
OpenFile指定模式打开File, err
ReadFile读取全部[]byte, err
WriteFile写入全部err
Stat文件信息FileInfo, err
Mkdir创建目录err
MkdirAll创建多层目录err
Remove删除err
RemoveAll递归删除err
Rename重命名err
Getenv获取环境变量string
LookupEnv安全获取string, bool
Getwd工作目录string, err
Getpid进程IDint
Exit退出进程

要点总结

  • Create创建文件,Open只读打开
  • OpenFile指定读写模式
  • ReadFile/WriteFile一次性读写
  • Stat获取文件信息
  • Mkdir创建单层,MkdirAll创建多层
  • Remove删除单个,RemoveAll递归删除
  • Getenv读取环境变量,LookupEnv区分不存在
  • os.Args获取命令行参数
  • Getpid/Getppid获取进程ID
  • os.Exit立即退出进程
  • os.Stdin/Stdout/Stderr标准输入输出
  • TempDir/CreateTemp处理临时文件

📝 发现内容有误?点击此处直接编辑

← 上一篇 Go net包
下一篇 → Go strconv包
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库