Envy makes working with ENV variables in Go trivial.
Envy makes working with ENV variables in Go trivial.
$ 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)
}
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")
.env
fileMY_ENV_FILE
, but not .env
.env
, and after that will load the .env.prod
file. If any variable is redefined in . env.prod
it will be overwritten (will contain the env.prod
value).env
file and return an error as the second file does not exist. The values in .env
will be loaded and available..env
file and return an error as the second file does not exist. The values in .env
will be loaded and available, but the ones in .env.prod
won't.