go时间处理和进程管理

124 阅读3分钟

时间处理

时间处理常用方法有:

  1. 获取当前时间:time.Now() 函数获取当前本地时间。是最常用来获取时间的函数。
currentTime := time.Now()// 当前的本地时间
  1. 构造时间:用time.Date() 函数构造时间,其参数为年、月、日、时、分、秒、纳秒和时区信息。如果不指定时区,则默认为 UTC 时区。
t := time.Date(2022, time.January, 1, 12, 0, 0, 0, time.UTC)
fmt.Println(t) // 2022-01-01 12:00:00 +0000 UTC
  1. 获取时间的细节:获取time 结构体的年、月、日、时、分、秒等信息。 如:
t := time.Now()
year := t.Year()
month := t.Month()
  1. 计算时间差:用 Sub() 方法计算两个时间点之间的时间差,得到一个时间段(time.Duration 类型)。时间段可以通过 Hours()Minutes()Seconds() 方法获取小时、分钟、秒等单位的数值。
t1 := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC)
t2 := time.Now()
duration := t2.Sub(t1)
fmt.Println(duration.Hours())   // 时间差的小时数
  1. 获取时间戳:用 Unix() 方法获取一个时间点的时间戳,大小为从 1970-01-01 00:00:00 UTC 到该时间点的秒数。
t := time.Now()
timestamp := t.Unix()
fmt.Println(timestamp) // 当前时间戳
  1. 时间格式化和解析:Format() 方法将时间按照指定格式转为字符串格式,Parse() 函数将字符串解析为时间。
t := time.Now()
fmt.Println(t.Format("2006-01-02 15:04:05")) // 输出: 当前时间的格式化字符串
t, _ = time.Parse("2006-01-02 15:04:05", "2022-01-01 12:00:00")
fmt.Println(t) // 输出: 解析后的时间

进程管理

  1. 在 Go 语言中,可以使用 os.Args 来获取程序执行时指定的命令行参数,类似于 C 语言中的 argvos.Args 是一个字符串切片,其中第一个元素是执行的二进制文件的名称路径,后续元素是传递给程序的命令行参数
  • 使用 os.Args 获取的命令行参数有:
args := os.Args
// 输出所有命令行参数
for _, arg := range args {
    fmt.Println(arg)
}
  • 若将上面的代码编译为二进制文件 test,然后执行以下命令:
./test abcd
  • 输出将会是,二进制文件路径执行时传入的参数
./test
abcd

2. 使用 os.Getenv 来读取环境变量。 os.Getenv 函数是用来获取指定环境变量的值,类似于js中的 process.env

  • 我们可以先使用 os.Setenv 函数来设置环境变量的值。
// 设置名为 "PATH" 的环境变量的值
os.Setenv("PATH", "/usr/local/bin")
  • 然后使用 os.Getenv 函数来获取环境变量的值。
// 获取名为 "PATH" 的环境变量的值
path := os.Getenv("PATH")
fmt.Println(path)// 输出: /usr/local/bin
  1. 在 Go 语言中,exec 包提供了执行外部命令的功能, 可以在 Go 语言中调用其他程序或脚本。
  • exec.Command 函数用于创建一个执行命令的对象。第一个参数是要执行的命令,后续参数是命令的参数
  • 注意exec.Command并没有真正执行命令,需要调用命令对象的方法如 Run()Output()Start() 等,才能执行命令。
  • 例如,调用Output()会等待命令执行完成,并返回命令的标准输出作为字节切片。若命令执行失败,则会返回错误信息。
	cmd := exec.Command("ls", "-l")//ls -l
	output, err := cmd.Output()
	if err != nil {
		fmt.Println("命令执行失败:", err)
		return
	}
	fmt.Println(string(output))