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

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

目录
相关文章
|
4天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
16天前
|
Linux Go iOS开发
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
本文介绍了如何在 VSCode 中禁用点击 Go 包名时自动打开浏览器跳转到 pkg.go.dev 的功能。通过将 gopls 的 `ui.navigation.importShortcut` 设置为 "Definition",可以实现仅跳转到定义处而不打开链接。具体操作步骤包括:打开设置、搜索 gopls、编辑 settings.json 文件并保存更改,最后重启 VSCode 使设置生效。
43 7
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
|
25天前
|
缓存 Java 调度
多线程编程核心:上下文切换深度解析
在现代计算机系统中,多线程编程已成为提高程序性能和响应速度的关键技术。然而,多线程编程中一个不可避免的概念就是上下文切换(Context Switching)。本文将深入探讨上下文切换的概念、原因、影响以及优化策略,帮助你在工作和学习中深入理解这一技术干货。
41 10
|
25天前
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
41 8
|
25天前
|
算法 调度 开发者
多线程编程核心:上下文切换深度解析
在多线程编程中,上下文切换是一个至关重要的概念,它直接影响到程序的性能和响应速度。本文将深入探讨上下文切换的含义、原因、影响以及如何优化,帮助你在工作和学习中更好地理解和应用多线程技术。
34 4
|
1月前
|
Go 索引
go语言使用strings包
go语言使用strings包
28 3
|
1月前
|
存储 缓存 开发者
Python编程中的装饰器深度解析
本文将深入探讨Python语言的装饰器概念,通过实际代码示例展示如何创建和应用装饰器,并分析其背后的原理和作用。我们将从基础定义出发,逐步引导读者理解装饰器的高级用法,包括带参数的装饰器、多层装饰器以及装饰器与类方法的结合使用。文章旨在帮助初学者掌握这一强大工具,同时为有经验的开发者提供更深层次的理解和应用。
36 7
|
1月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
1月前
|
编译器 Go 开发者
go语言中导入相关包
【11月更文挑战第1天】
33 3
|
1月前
|
存储 Go PHP
Go语言中的加解密利器:go-crypto库全解析
在软件开发中,数据安全和隐私保护至关重要。`go-crypto` 是一个专为 Golang 设计的加密解密工具库,支持 AES 和 RSA 等加密算法,帮助开发者轻松实现数据的加密和解密,保障数据传输和存储的安全性。本文将详细介绍 `go-crypto` 的安装、特性及应用实例。
78 0

推荐镜像

更多