一篇文章告诉你 golang 环境变量的所有基础操作
一篇文章告诉你 golang 环境变量的所有基础操作
原文链接: https://tangx.in/posts/2021/09/06/golang-os-env-operation/
golang 中的环境变量操作都在 os
包下面, 只有很少的几个方法, 而且字面意思也很明确。
所有环境变量操作对象都是 字符串
string
, 因此对于 int, bool 类型需要自己实现转换。golang 程序执行的时候, 是在 linux 系统中 fork 的一种子进程中
- golang程序 在 复制了开始运行的那一瞬间的当前环境所有变量, 之后的父进程中的变量变化不再影响 golang 程序。
- golang 程序对环境变量的所有操作,都是在自身的子进程中,因此 只会影响 golang 程序本身。
- go 语言中没有类似 bash 中的
export
的操作。 但是可以通过os.Setenv
设置环境变量。
环境变量操作方法
1. os.Setenv("key","val")
创建一个环境变量
2. os.Unsetenv("key")
取消一个变量
3. val=os.Getenv("key")
返回一个变量的值。 如果变量不存在, val 为空字符串。
使用 len(val)==0
无法判断 变量值为空 或者 变量不存在
4. val,ok=os.LookupEnv("key")
返回一个变量的值 与 变量是否存在的 bool 结果。
如果变量存在, val 为值, ok 为
true
如果变量不存在, val 为空字符串, ok 为
false
注意, 变量不存在
(ok=false)
和 变量值为空(ok=true)
不一样
5. os.Clearenv()
清空所有变量。 危险 慎用。
6. envs=os.Environ()
返回包含所有变量的 []string
切片 副本 。
由于 os.Environ()
返回的是一个 []string
切片, 在某些场景下, 如果要进行 传递并检索 的时候, 并不是很方便, 因此会有需求转换成 map[string]string
。
在这里 需要额外小心, 如果变量值中存在 等号 =
的话, 使用 strings.Split
进行分割之后, 而没有再使用 strings.Join
合并时, 可能会造成数据丢失。 有点拗口, 看例子。
因为一下语句时合法的
|
|
这句话赋值语句表示将& 字符串 key1=val1,key2=val2
赋值给 变量 VAR
例如下面这段代码, envutils - fix: lost value when trans env string slice into map
|
|
7. os.ExpandEnv("string")
or os.Expand("string",os.Getenv)
如果 string 中包含 $key
或者 ${key}
的 占位符 , 则将被替换为实际的值。就是 bash
中的变量用法。
|
|
- 原文链接:https://typonotes.com/posts/2021/09/06/golang-os-env-operation/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生
或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。