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

目录
相关文章
|
15天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
20天前
|
存储 缓存 安全
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
|
28天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
28天前
|
算法 Linux C++
【Linux系统编程】深入解析Linux中read函数的错误场景
【Linux系统编程】深入解析Linux中read函数的错误场景
202 0
|
29天前
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
47 0
|
20天前
|
存储 安全 Go
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
|
29天前
|
存储 JSON 安全
【C++ 泛型编程 综合篇】泛型编程深度解析:C++中的五种类型泛型策略综合对比
【C++ 泛型编程 综合篇】泛型编程深度解析:C++中的五种类型泛型策略综合对比
65 1
|
29天前
|
设计模式 算法 数据安全/隐私保护
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(二)
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用
25 0
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(二)
|
6天前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
18 0
|
11天前
|
Java 数据库 Spring
切面编程的艺术:Spring动态代理解析与实战
切面编程的艺术:Spring动态代理解析与实战
25 0
切面编程的艺术:Spring动态代理解析与实战

推荐镜像

更多