mirror of https://github.com/liamg/aminal.git
|
|
||
|---|---|---|
| .. | ||
| test_env | ||
| .env | ||
| .gitignore | ||
| .gometalinter.json | ||
| .travis.yml | ||
| LICENSE.txt | ||
| Makefile | ||
| README.md | ||
| envy.go | ||
| envy_test.go | ||
| go.mod | ||
| go.sum | ||
| shoulders.md | ||
| version.go | ||
README.md
envy
Envy makes working with ENV variables in Go trivial.
- Get ENV variables with default values.
- Set ENV variables safely without affecting the underlying system.
- Temporarily change ENV vars; useful for testing.
- Map all of the key/values in the ENV.
- Loads .env files (by using godotenv)
- More!
Installation
$ go get -u github.com/gobuffalo/envy
Usage
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 files support
Envy now supports loading .env files by using the godotenv library.
That means one can use and define multiple .env files which will be loaded on-demand. By default, no env files will be loaded. To load one or more, you need to call the envy.Load function in one of the following ways:
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")
- Will load the default
.envfile - Will load the file
MY_ENV_FILE, but not.env - Will load the file
.env, and after that will load the.env.prodfile. If any variable is redefined in. env.prodit will be overwritten (will contain theenv.prodvalue) - Will load the
.envfile and return an error as the second file does not exist. The values in.envwill be loaded and available. - Same as 4
- Will load the
.envfile and return an error as the second file does not exist. The values in.envwill be loaded and available, but the ones in.env.prodwon't.