envy
envy copied to clipboard
Envy makes working with ENV variables in Go trivial.
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
NOTE: the behavior of .env support was changed in v2.
Previously, envy.Load() overwrote all pre-existing environment variables
with the values in the .env file but now pre-existing variables have higher
priority and will remain as is. (It will help you to configure your runtime
environment in the modern platforms including cloud computing environments)
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, Envy loads .env file in the working directory if the file exists.
To load additional 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.prod", ".env") // 3
envy.Load(".env", "NON_EXISTING_FILE") // 4
envy.Load(".env.prod", "NON_EXISTING_FILE", ".env") // 5
// 6
envy.Load(".env.prod")
envy.Load("NON_EXISTING_FILE")
envy.Load(".env")
- Will load the default
.envfile from the current working directory. - Will load the file
MY_ENV_FILE, but not.env - Will load the file
.env.prodfirst, then will load the.envfile. If any variable is redefined in.env, they will be ignored. - Will load the
.envfile and return an error as the second file does not exist. The values in.envwill be loaded and available. - Will load the
.env.prodfile and return an error as the second file does not exist. The values in.env.prodwill be loaded and available, but the ones in.envwon't. - The result of this will be the same as 3 as you expected.