在 Go 语言中,os
包是一个标准库包,提供了与操作系统交互的功能。它包含了许多用于文件操作、环境变量、进程管理等常见系统操作的函数和方法。以下是一些常见的 os
包用法和示例:
1. 文件和目录操作
打开/创建文件
file, err := os.Create("test.txt") // 创建文件
if err != nil {
log.Fatal(err)
}
defer file.Close() // 确保文件关闭
file, err = os.Open("test.txt") // 只读方式打开文件
if err != nil {
log.Fatal(err)
}
defer file.Close()
读取文件内容
data, err := os.ReadFile("test.txt") // Go 1.16+ 推荐
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data))
写入文件
err := os.WriteFile("test.txt", []byte("Hello, Go!"), 0644) // Go 1.16+
if err != nil {
log.Fatal(err)
}
检查文件是否存在
_, err := os.Stat("test.txt")
if errors.Is(err, os.ErrNotExist) {
fmt.Println("文件不存在")
} else if err == nil {
fmt.Println("文件存在")
}
遍历目录
entries, err := os.ReadDir(".") // 当前目录
if err != nil {
log.Fatal(err)
}
for _, entry := range entries {
fmt.Println(entry.Name())
}
2. 环境变量操作
获取环境变量
path := os.Getenv("PATH")
fmt.Println(path)
设置环境变量
os.Setenv("MY_VAR", "value")
获取所有环境变量
envs := os.Environ()
for _, env := range envs {
fmt.Println(env)
}
3. 进程管理
获取进程ID(PID)
pid := os.Getpid()
fmt.Println("PID:", pid)
退出程序并返回状态码
os.Exit(0) // 0表示成功,非0表示错误
4. 用户和权限相关
获取当前用户信息
user, err := user.Current()
if err != nil {
log.Fatal(err)
}
fmt.Println("用户名:", user.Username)
fmt.Println("家目录:", user.HomeDir)
注意:
user.Current()
属于os/user
包,需单独导入。
5. 其他常用功能
os.TempDir()
:返回系统的临时目录。os.Hostname()
:获取主机名。os.Chmod()
/os.Chown()
:修改文件权限或所有者。
注意事项:
- 错误处理:
os
包的许多函数返回错误,务必检查错误避免崩溃。 - 资源释放:打开的文件或资源需用
defer
确保关闭。 - 跨平台兼容性:路径分隔符使用
os.PathSeparator
,换行符使用os.LineSeparator
。
如果需要更复杂的功能(如并发安全操作),可以结合其他包如:
io/ioutil
(Go <1.16)或直接使用os.ReadFile
/WriteFile
path/filepath
(处理跨平台路径)bufio
(缓冲读写)
如果有具体需求场景(如监控文件变化、高级权限控制等),可以进一步探讨!
内容由零声教学AI助手提供,问题来源于学员提问