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

简介: 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 包的功能可以开发出更强大的系统级程序。

目录
相关文章
|
机器学习/深度学习 存储 算法
【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)
这篇文章详细解析了力扣热题 347——前 K 个高频元素的三种解法:哈希表+小顶堆、哈希表+快速排序和哈希表+桶排序。每种方法都附有清晰的思路讲解和 Go 语言代码实现。小顶堆方法时间复杂度为 O(n log k),适合处理大规模数据;快速排序方法时间复杂度为 O(n log n),适用于数据量较小的场景;桶排序方法在特定条件下能达到线性时间复杂度 O(n)。文章通过对比分析,帮助读者根据实际需求选择最优解法,并提供了完整的代码示例,是一篇非常实用的算法学习资料。
911 90
|
存储 自然语言处理 算法
【LeetCode 热题100】208:实现 Trie (前缀树)(详细解析)(Go语言版)
本文详细解析了力扣热题 208——实现 Trie(前缀树)。Trie 是一种高效的树形数据结构,用于存储和检索字符串集合。文章通过插入、查找和前缀匹配三个核心操作,结合 Go 语言实现代码,清晰展示了 Trie 的工作原理。时间复杂度为 O(m),空间复杂度也为 O(m),其中 m 为字符串长度。此外,还探讨了 Trie 的变种及应用场景,如自动补全和词典查找等。适合初学者深入了解 Trie 结构及其实际用途。
659 14
|
SQL 运维 监控
高效定位 Go 应用问题:Go 可观测性功能深度解析
为进一步赋能用户在复杂场景下快速定位与解决问题,我们结合近期发布的一系列全新功能,精心梳理了一套从接入到问题发现、再到问题排查与精准定位的最佳实践指南。
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
597 11
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
512 19
|
网络协议 Linux Go
自己动手编写tcp/ip协议栈1:tcp包解析
学习tuntap中的tun的使用方法,并使用tun接口解析了ip包和tcp包,这是实现tcp/ip协议栈的第一步。
642 15
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
存储 算法 安全
基于 Go 语言的公司内网管理软件哈希表算法深度解析与研究
在数字化办公中,公司内网管理软件通过哈希表算法保障信息安全与高效管理。哈希表基于键值对存储和查找,如用户登录验证、设备信息管理和文件权限控制等场景,Go语言实现的哈希表能快速验证用户信息,提升管理效率,确保网络稳定运行。
336 0
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
1796 0
Vanilla OS:下一代安全 Linux 发行版
|
Ubuntu Unix Linux
操作系统的最强入门科普(Unix/Linux篇)
下期文章,小枣君会重点聊聊Windows和macOS那条线。敬请关注! 如果大家觉得文章不错,还请帮忙多多转发!谢谢!

热门文章

最新文章

推荐镜像

更多
  • DNS