【Go学习】如何使用os包操作环境变量

Go标准库提供了非常多实用的功能,其中就包含了操作环境变量。

环境变量是操作系统中用于存储配置信息的变量,这些信息可以在不同的程序之间共享。它们通常用于存储系统的全局设置,如临时文件目录、路径、默认的shell、语言设置等。

环境变量通常在程序启动时就已设置好,在需要的时候随时读取。Go使用简单的几个函数就可以对环境变量进行增删查改。下面分别讲解。

一、列出所有环境变量

func Environ() \[\]string

Environ 返回一个字符串切片的副本,这些字符串代表环境变量,形式为 "key=value"。

示例:

复制代码
package main

import (
	"fmt"
	"os"
)

func main() {
	for _, value := range os.Environ() {
		fmt.Println(value)
	}
}

输出如下(环境变量的一部分):

复制代码
GOBIN=d:\Program files\Go\bin"
GOFLAGS=-mod=vendor
GOMODCACHE=D:\go\pkg\mod
GOPATH=D:\go
GOPROXY=https://goproxy.io,direct
...

二、清除所有环境变量

func Clearenv()

它会在程序运行时 删除所有环境变量,程序结束后,系统环境变量不会变化,放心,还在。有些地方说这个命令很危险,其实没什么。

示例:

复制代码
package main

import (
	"fmt"
	"os"
)

func main() {
	os.Clearenv()
	for _, value := range os.Environ() {
		fmt.Println(value)
	}
}

输出结果为空,说明该命令起作用了。屏蔽第9行,再次运行,系统环境变量再次列出,和一章节结果相同。

三、检索环境变量

func LookupEnv(key string) (string, bool)

LookupEnv 检索由键命名的环境变量的值。如果环境中有该变量,则返回值(可能为空)以及一个为真的布尔值。否则,返回的值将为空,布尔值将为假。

示例:

复制代码
package main

import (
	"fmt"
	"os"
)

func main() {
	goPath, bgExist := os.LookupEnv("GOPATH")
	fmt.Println("GOPATH =", goPath, ", bgExist =", bgExist)
	luaPath, blExist := os.LookupEnv("LUAPATH")
	fmt.Println("LUAPATH =", luaPath, ", blExist =", blExist)
}

输出如下:

复制代码
GOPATH = D:\go , bgExist = true
LUAPATH =  , blExist = false

四、获取环境变量

func Getenv(key string) string

Getenv 用于检索由键命名的环境变量的值。它返回该值,如果变量不存在,则返回空字符串。要区分空值和未设置的值,请使用 LookupEnv。

示例:

复制代码
package main

import (
	"fmt"
	"os"
)

func main() {
	goPath := os.Getenv("GOPATH")
	fmt.Println("GOPATH = ", goPath)
}

输出如下:

复制代码
GOPATH =  D:\go

五、设置环境变量

func Setenv(key, value string) error

Setenv 设置由键命名的环境变量的值。如果遇到任何错误,它将返回该错误。

示例:

复制代码
package main

import (
	"fmt"
	"os"
)

func main() {
	err := os.Setenv("TESTENV", "TestValue")
	if err != nil {
		os.Exit(1)
	}
	testValue := os.Getenv("TESTENV")
	fmt.Println("TESTENV = ", testValue)
}

输出如下:

复制代码
TESTENV =  TestValue

六、删除环境变量

func Unsetenv(key string) error

Unsetenv 删除单个环境变量。

示例:

复制代码
package main

import (
	"fmt"
	"os"
)

func main() {
	err := os.Unsetenv("TESTENV")
	if err != nil {
		os.Exit(1)
	}
	testValue := os.Getenv("TESTENV")
	fmt.Println("TESTENV = ", testValue)
}

输出为:

复制代码
TESTENV =  

七、展开环境变量

func ExpandEnv(s string) string

ExpandEnv 会根据当前环境变量的值,将字符串中的 {var} 或 var 替换掉。对未定义变量的引用将被空字符串替换。相当于不需要os.Getenv了。

示例:

复制代码
package main

import (
	"fmt"
	"os"
)

func main() {
	os.Setenv("GAME_NAME", "Chronicles of Darkness")
	os.Setenv("GAME_DIR", "/usr/games")

	fmt.Println(os.ExpandEnv("The $GAME_NAME game is placed in the ${GAME_DIR} path."))
}

输出结果为:

复制代码
The Chronicles of Darkness game is placed in the /usr/games path.

以上就是go利用标准库os操作环境变量的全部内容,学会了吗?

相关推荐
xyouyuweizhu14 分钟前
Java InetAddress 详解:从 IP 地址表示到主机名解析
java·开发语言·python
布莱克6059 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
LabVIEW开发9 小时前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
benchmark_cc10 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
前进的李工11 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
Zenova EdgeOS11 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是11 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
FRing0312 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
正在走向自律13 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
Fatbobman(东坡肘子)13 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift