gobuffalo/envy
GitHub: gobuffalo/envy
一个简化 Go 语言环境变量操作的库,支持默认值获取、临时变量设置和 .env 文件加载。
Stars: 152 | Forks: 19
# envy
[](https://github.com/gobuffalo/envy/workflows/actions)
Envy 让在 Go 中使用 ENV 变量变得非常简单。
* 获取带有默认值的 ENV 变量。
* 安全地设置 ENV 变量,而不影响底层系统。
* 临时更改 ENV 变量;这对于测试非常有用。
* 映射 ENV 中的所有键/值对。
* 加载 `.env` 文件(通过使用 [godotenv](https://github.com/joho/godotenv/))
* 更多功能!
## 安装说明
```
$ go get -u github.com/gobuffalo/envy
```
## 用法
```
func Test_Get(t *testing.T) {
r := require.New(t)
r.NotZero(os.Getenv("GOPATH"))
r.Equal(os.Getenv("GOPATH"), envy.Get("GOPATH", "foo"))
r.Equal("bar", envy.Get("IDONTEXIST", "bar"))
}
func Test_MustGet(t *testing.T) {
r := require.New(t)
r.NotZero(os.Getenv("GOPATH"))
v, err := envy.MustGet("GOPATH")
r.NoError(err)
r.Equal(os.Getenv("GOPATH"), v)
_, err = envy.MustGet("IDONTEXIST")
r.Error(err)
}
func Test_Set(t *testing.T) {
r := require.New(t)
_, err := envy.MustGet("FOO")
r.Error(err)
envy.Set("FOO", "foo")
r.Equal("foo", envy.Get("FOO", "bar"))
}
func Test_Temp(t *testing.T) {
r := require.New(t)
_, err := envy.MustGet("BAR")
r.Error(err)
envy.Temp(func() {
envy.Set("BAR", "foo")
r.Equal("foo", envy.Get("BAR", "bar"))
_, err = envy.MustGet("BAR")
r.NoError(err)
})
_, err = envy.MustGet("BAR")
r.Error(err)
}
```
## .env 文件支持
Envy 现在通过使用 [godotenv 库](https://github.com/joho/godotenv/) 支持加载 `.env` 文件。
这意味着用户可以使用和定义多个 `.env` 文件,它们将按需加载。默认情况下,不会加载任何 env 文件。要加载一个或多个文件,你需要通过以下方式之一调用 `envy.Load` 函数:
```
envy.Load() // 1
envy.Load("MY_ENV_FILE") // 2
envy.Load(".env", ".env.prod") // 3
envy.Load(".env", "NON_EXISTING_FILE") // 4
// 5
envy.Load(".env")
envy.Load("NON_EXISTING_FILE")
// 6
envy.Load(".env", "NON_EXISTING_FILE", ".env.prod")
```
1. 将加载默认的 `.env` 文件
2. 将加载文件 `MY_ENV_FILE`,**但不会**加载 `.env`
3. 将加载 `.env` 文件,随后加载 `.env.prod` 文件。如果任何变量在 `.env.prod` 中被重新定义,它将被覆盖(将包含 `env.prod` 的值)
4. 将加载 `.env` 文件,并由于第二个文件不存在而返回错误。`.env` 中的值将被加载并可用。
5. 同 4
6. 将加载 `.env` 文件,并由于第二个文件不存在而返回错误。`.env` 中的值将被加载并可用,**但是** `.env.prod` **中的值不会**。
标签:EVTX分析, Go, Ruby工具, SOC Prime, 库, 应急响应, 开发工具, 日志审计, 环境变量