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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 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 包的功能可以开发出更强大的系统级程序。

目录
相关文章
|
8天前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统的协同进化####
当今时代,移动应用不再仅仅是简单的软件工具,它们已成为扩展智能手机及平板等设备功能的关键。本文旨在深入分析当前移动应用的开发趋势,探讨移动操作系统的最新进展及其对应用开发的影响,并阐述两者如何相互促进、协同进化,共同推动移动互联网技术向前发展。 ####
|
10天前
|
移动开发 人工智能 Android开发
移动应用与系统:探索移动开发与操作系统的协同进化####
当今数字化时代,移动设备已成为日常生活不可或缺的一部分。本文旨在深入探讨移动应用开发与移动操作系统之间的紧密关系及其相互影响,揭示技术创新如何推动这一领域的发展。通过分析当前主流移动操作系统的特点、移动应用的开发趋势以及两者间的互动机制,本文为开发者和用户提供了一个全面了解该领域的窗口。 ####
|
7天前
|
开发工具 Android开发 iOS开发
移动应用与系统:涵盖移动应用开发、移动操作系统等相关话题####
本文深入探讨了移动应用开发和移动操作系统的复杂世界。从移动应用开发的基本概念到移动操作系统的核心功能,再到两者如何相互作用以提供无缝的用户体验,本文全面涵盖了这一领域的各个方面。无论你是开发者、技术爱好者还是普通用户,这篇文章都将为你提供有价值的见解。 ####
17 1
|
13天前
|
人工智能 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的协同进化####
本文深入探讨了移动应用开发的当前趋势,以及这些趋势如何与移动操作系统的发展相互影响、协同进化。通过分析最新的技术动态、市场数据及用户行为变化,本文旨在为开发者提供关于未来移动应用开发方向的洞察,并讨论操作系统层面的创新如何促进或制约应用的发展。 ####
|
14天前
|
编译器 Go 开发者
go语言中导入相关包
【11月更文挑战第1天】
27 3
|
19天前
|
安全 程序员 API
|
16天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
16天前
|
安全 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的演进####
【10月更文挑战第29天】 本文深入探讨了移动应用开发的最新趋势与挑战,并分析了主流移动操作系统(如Android、iOS)的发展动态。通过对比不同系统的技术特点和市场表现,揭示了移动应用生态系统的复杂性及其对开发者的影响。此外,还讨论了跨平台开发工具的兴起如何改变应用开发流程,以及这些变化对未来移动计算领域的潜在影响。 ####
30 4
|
14天前
|
安全 Android开发 iOS开发
移动应用与系统:探索移动应用开发与操作系统的协同进化###
【10月更文挑战第29天】 本文深入探讨了移动应用开发与移动操作系统之间的紧密联系与相互促进作用,分析了当前主流移动操作系统(如iOS、Android)的最新特性及其对应用开发的影响,并展望了未来移动应用与系统协同发展的新趋势。通过具体案例分析,揭示了开发者如何利用系统特性优化应用性能,提升用户体验,同时指出了跨平台开发工具的兴起如何进一步模糊了应用与系统间的界限,推动了整个移动互联网生态系统的繁荣发展。 ###
37 2
|
20天前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索移动应用开发及操作系统的未来趋势####
本文深入探讨了移动应用开发和移动操作系统的现状、挑战与未来发展趋势。通过分析当前主流的移动操作系统(如Android和iOS)以及移动应用开发的最新技术,旨在为开发者提供有价值的参考,帮助他们更好地应对未来的挑战。 ####

推荐镜像

更多
下一篇
无影云桌面