gobuffalo/envy

GitHub: gobuffalo/envy

一个简化 Go 语言环境变量操作的库,支持默认值获取、临时变量设置和 .env 文件加载。

Stars: 152 | Forks: 19

# envy [![Actions Status](https://github.com/gobuffalo/envy/workflows/Tests/badge.svg)](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, 库, 应急响应, 开发工具, 日志审计, 环境变量