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.