Go 语言 os 包用法简述
1. os.Args 获取命令行参数
os.Args 是一个[]string 类型的 slice,它包含了命令行调用程序时传入的所有参数。
通过它可以访问到命令行参数。
package main import ( "fmt" "os") func main() { args := os.Args fmt.Println(args)}
在终端运行:
go run demo.go a b c
输出:
[demo.go a b c]
args[0]永远都是程序本身的路径,args[1:]包含所有参数。
可以通过遍历和索引来访问单个参数。
for _, arg := range os.Args[1:] { fmt.Println(arg) }
2. os.Create 创建文件
os.Create()会创建指定名称的文件,返回一个*File 和错误信息。
file, err := os.Create("test.txt")if err != nil { return err}defer file.Close()
3. os.Open 打开文件
os.Open()会以只读的方式打开指定名称的文件,返回一个*File 和错误信息。
file, err := os.Open("test.txt") if err != nil { return err}defer file.Close()
4. os.StartProcess 启动新进程
os.StartProcess 可以用来启动一个新进程。
cmd := exec.Command("ls", "-l")err := cmd.Start()if err != nil { log.Fatal(err)}log.Printf("Waiting for command to finish...") err = cmd.Wait() log.Printf("Command finished with error: %v", err)
5. os.Getenv 获取环境变量
os.Getenv 可以获取指定的环境变量的值。
os.Getenv("GOPATH")
6. os.Chdir 切换当前工作目录
os.Chdir 可以切换当前进程的工作目录。
err := os.Chdir("/tmp") if err != nil { log.Fatal(err)}
7. os.Mkdir 创建目录
os.Mkdir 可以创建一个目录。
package main import ( "log" "os") func main() { err := os.Mkdir("testdir", 0755) if err != nil { log.Fatal(err) } }
8. os.Remove 删除文件
os.Remove 可以删除指定的文件或目录。
err := os.Remove("test.txt")if err != nil { log.Fatal(err)}
9. os.Rename 重命名文件
os.Rename 可以重命名文件或目录。
package main import ( "log" "os") func main() { err := os.Rename("test.txt", "test_new.txt") if err != nil { log.Fatal(err) }}
10. os.Truncate 截断文件
os.Truncate 可以对文件进行截断,使得文件只保留截断之前的内容。
package main import ( "log" "os") func main() { f, err := os.OpenFile("test.txt", os.O_RDWR, 0644) if err != nil { log.Fatal(err) } defer f.Close() err = os.Truncate("test.txt", 10) if err != nil { log.Fatal(err) } }
11. os.TempDir 获取临时目录
os.TempDir 可以获取当前系统的临时文件目录。
package main import ( "fmt" "os") func main() { tmpDir := os.TempDir() fmt.Println(tmpDir)}
12. os.Getpagesize 获取页面大小
os.Getpagesize 可以获取操作系统的页面大小。
size := os.Getpagesize() fmt.Println(size)
13. os.Getwd 获取当前工作目录
os.Getwd 可以获取当前进程的工作目录。
package main import ( "fmt" "log" "os") func main() { dir, err := os.Getwd() if err != nil { log.Fatal(err) } fmt.Println(dir)}
14. os.Geteuid 获取有效用户 ID
os.Geteuid 可以获取调用进程的用户 ID。
uid := os.Geteuid() fmt.Println(uid)
15. os.Hostname 获取主机名
os.Hostname 可以获取主机的名称。
name, err := os.Hostname()if err != nil { fmt.Printf("Error: %v\n", err) return}fmt.Println(name)
16. os.Getpid 获取当前进程 id
os.Getpid 可以获取当前进程的进程 ID。
pid := os.Getpid()fmt.Println(pid)
17. os.Environ 获取环境变量
os.Environ 可以获取当前进程的环境变量。
env := os.Environ()for _, v := range env { fmt.Println(v)}
18. os.Exit 退出当前进程
os.Exit 可以退出当前执行的进程。
os.Exit(1)
19. os.IsExist 判断文件或文件夹是否存在
os.IsExist 可以判断一个文件或文件夹是否存在。
package main import ( "fmt" "os") func main() { if _, err := os.Stat("/path/to/file"); os.IsNotExist(err) { fmt.Println("file does not exist") }}
20. os.Stat 获取文件信息
os.Stat 可以获取文件或目录的信息。
info, err := os.Stat("test.txt")if err != nil { log.Fatal(err)}fmt.Println(info.Size()) // 文件大小
21. os.ReadFile 读取整个文件
os.ReadFile 可以读取整个文件的内容,返回字节 slice。
data, err := os.ReadFile("test.txt") if err != nil { log.Fatal(err) }fmt.Print(string(data))
22. os.WriteFile 写入文件
os.WriteFile 可以将数据写入文件。
data := []byte("Hello World") err := os.WriteFile("data.txt", data, 0644) if err != nil { log.Fatal(err)}
23. 总结
以上就是 Go 语言 os 包的简要用法介绍,os 包提供了丰富的系统级操作函数,可以用来获取环境信息、读取文件、执行进程等非常实用。
通过合理利用 os 包的功能可以开发出更强大的系统级程序。