Go语言os标准库
目录
Go语言os标准库
Go语言的os
标准库提供了丰富的功能来与操作系统交互,涵盖文件操作、目录管理、环境变量、进程控制等。以下是一些常用函数及示例:
一、文件操作
1 打开/关闭文件
os.Open()
:打开文件(只读)。os.Create()
:创建文件(若存在则清空)。 // 打开文件 file, err := os.Open(“test.txt”) if err != nil { log.Fatal(err) } defer file.Close() // 创建文件 newFile, err := os.Create(“newfile.txt”) if err != nil { log.Fatal(err) } defer newFile.Close()
2 读写文件
os.ReadFile()
:读取整个文件。os.WriteFile()
:写入整个文件(覆盖)。 // 读取文件 data, err := os.ReadFile(“test.txt”) if err != nil { log.Fatal(err) } fmt.Println(string(data)) // 写入文件 content := []byte(“Hello, Go!”) err = os.WriteFile(“output.txt”, content, 0644) // 权限 0644 if err != nil { log.Fatal(err) }
3 文件信息
os.Stat()
:获取文件信息(大小、权限等)。 info, err := os.Stat(“test.txt”) if err != nil { log.Fatal(err) } fmt.Println(“文件名:”, info.Name()) fmt.Println(“大小:”, info.Size(), “bytes”) fmt.Println(“修改时间:”, info.ModTime())
4 文件操作扩展
os.OpenFile()
:更灵活地打开文件(支持读写、追加等模式)。 // 追加写入文件 file, err := os.OpenFile(“log.txt”, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644) if err != nil { log.Fatal(err) } defer file.Close() _, err = file.WriteString(“New log entry\n”) if err != nil { log.Fatal(err) }
二、目录操作
1 创建目录
os.Mkdir()
:创建单级目录。os.MkdirAll()
:创建多级目录。 err := os.Mkdir(“mydir”, 0755) // 权限 0755 if err != nil { log.Fatal(err) } err = os.MkdirAll(“parent/child/grandchild”, 0755) // 创建嵌套目录 if err != nil { log.Fatal(err) }
2 删除文件/目录
os.Remove()
:删除文件或空目录。os.RemoveAll()
:递归删除目录及其内容。 err := os.Remove(“oldfile.txt”) if err != nil { log.Fatal(err) } err = os.RemoveAll(“obsolete_dir”) // 强制删除非空目录 if err != nil { log.Fatal(err) }
3 遍历目录
os.ReadDir()
:读取目录内容。 entries, err := os.ReadDir(".") if err != nil { log.Fatal(err) } for _, entry := range entries { fmt.Println(entry.Name()) }
三、环境变量
1 获取/设置环境变量
os.Getenv()
:获取环境变量。os.Setenv()
:设置环境变量(当前进程有效)。 path := os.Getenv(“PATH”) fmt.Println(“PATH:”, path) err := os.Setenv(“TEMP_DIR”, “/tmp”) if err != nil { log.Fatal(err) }
四、进程与参数
1 命令行参数
os.Args
:获取命令行参数。 // 运行示例:go run main.go arg1 arg2 fmt.Println(“程序名:”, os.Args[0]) fmt.Println(“参数:”, os.Args[1:])
2 进程退出
os.Exit()
:终止进程并返回状态码。 fmt.Println(“程序即将退出”) os.Exit(1) // 非0状态码表示错误
五、其他实用函数
1 工作目录
os.Getwd()
:获取当前目录。os.Chdir()
:修改当前目录。 dir, err := os.Getwd() if err != nil { log.Fatal(err) } fmt.Println(“当前目录:”, dir) err = os.Chdir("/tmp") // 切换到 /tmp if err != nil { log.Fatal(err) }
2 标准输入/输出
os.Stdin
,os.Stdout
,os.Stderr
:标准流。 // 从标准输入读取并输出到标准输出 io.Copy(os.Stdout, os.Stdin)
六、文件权限
os.Chmod()
:修改文件权限。 err := os.Chmod(“secret.txt”, 0600) // 仅所有者可读写 if err != nil { log.Fatal(err) }