go-envparser generates static DecodeEnv  functions for structures  in Go to decode environment variables,  will implement the interface Decoder. The generated functions reduce the reliance upon runtime reflection to do serialization.
git clone https://github.com/gokultp/go-envparser.git
cd go-envparser
make
#check if the command is working
envparser versionshould get an output in the following format
Version : V0.1.0
MinVersion : e3a5a007b94f51f46a64853f308e5a24daf98892
BuildTime : 2019-08-19T00:56:29+0530
envparser generate -s <structname> -f <filename>It will generate a file with name <structname>decoder.go  (Lowercase) consist of a DecodeEnv function which will be implementing the interface  Decoder.
package main
import (
	"fmt"
	"github.com/gokultp/go-envparser/pkg/envdecoder"
)
// Add go generate commands
//go:generate envparser generate -t GoEnv -f $GOFILE
// Dont forget to do goimport on generated files.
//go:generate goimports -w goenvdecoder.go
type GoEnv struct {
	Paths  Path
	GoRoot string `env:"GOROOT"`
}
//go:generate envparser generate -t Path -f $GOFILE
// Dont forget to do goimport on generated files.
//go:generate goimports -w pathdecoder.go
type Path struct {
	System []string `env:"PATH"`
	Go     string   `env:"GOPATH"`
}
func main() {
	env := GoEnv{}
	if err := envdecoder.Decode(&env); err != nil {
		panic(err)
	}
	fmt.Printf("%#v", env)
}Here in the above file I have used go generate flags, will execute all the needed commands( envparser generate && goimports) in a single go generate command.
So here to generate the code execute
go generateto run the code execute
go build
./<binary>go-envparser is licensed under the MIT License