Go 系統編程不求人:os 包全面解析
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 包的功能可以開發出更強大的系統級程序。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/_1dZ4sXuSB1j5TO4DVHwGA