Go系统编程不求人:os包全面解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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 包的功能可以开发出更强大的系统级程序。

目录
相关文章
|
18天前
|
存储 人工智能 安全
操作系统的心脏:内核深度解析
【8月更文挑战第13天】 在数字世界的每一次跳动中,都能感受到操作系统内核的强大生命力。本文将带你走进操作系统的核心——内核,揭示它如何协调和管理计算机硬件资源,保证软件运行的高效和稳定。从内核的定义和功能,到它的结构和设计哲学,再到现代操作系统中的创新与挑战,我们将一起探索这个让计算机系统“活着”的秘密所在。
34 3
|
23天前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
23天前
|
并行计算 数据挖掘 大数据
[go 面试] 并行与并发的区别及应用场景解析
[go 面试] 并行与并发的区别及应用场景解析
|
4天前
|
SQL 设计模式 安全
Java编程中的单例模式深入解析
【8月更文挑战第27天】本文旨在探索Java中实现单例模式的多种方式,并分析其优缺点。我们将通过代码示例,展示如何在不同的场景下选择最合适的单例模式实现方法,以及如何避免常见的陷阱。
|
5天前
|
关系型数据库 MySQL API
我用 go-zero 一周实现了一个中台系统
我用 go-zero 一周实现了一个中台系统
|
19天前
|
算法 安全 调度
操作系统的心脏:内核深度解析
【8月更文挑战第12天】 本文将带你进入操作系统的核心—内核,探索其设计、功能和工作原理。我们将通过通俗易懂的语言和生动的比喻,让你轻松理解这个复杂但至关重要的主题。无论你是计算机科学的初学者,还是有一定基础的开发者,这篇文章都将为你提供新的视角和深入的理解。让我们一起揭开操作系统内核的神秘面纱,探索它的奥秘吧!
26 3
|
2天前
|
XML 存储 JavaScript
xml介绍与解析,及xml库包使用
xml介绍与解析,及xml库包使用
7 0
|
2天前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
12 0
|
10天前
|
API Docker 容器
容器镜像解析问题之使用go-containerregistry在代码中解析容器镜像如何解决
容器镜像解析问题之使用go-containerregistry在代码中解析容器镜像如何解决
16 0
|
10天前
|
存储 资源调度 安全
操作系统的心脏:内核深度解析
本文将带你深入操作系统的核心—内核,探索其如何作为系统的中枢神经,协调硬件与软件之间的复杂交互。我们将从内核的基本概念出发,逐步揭示其设计哲学、关键组件以及在现代计算环境中的作用。通过这篇文章,你将获得对操作系统内核工作原理的深刻理解,并认识到它在维护系统稳定性和性能中的关键角色。

推荐镜像

更多
下一篇
云函数