Skip to content

potproject/goenvgen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goenvgen Go codecov Go Report Card

Automatically generate Go Code from dotenv files.

This cli automatically determines the type information from the dotenv information and generates a Go package that can retrieve it. os.GetEnv the code becomes complicated because of the lack of type information. This package eliminates the need to use os.GetEnv.

Usage

Installation

# Go >= 1.17: $ go install github.com/potproject/goenvgen # Go < 1.17: $ go get github.com/potproject/goenvgen 

Generate Code

Add your application configuration to your .env file in the root of your project.

BASE_HOST=localhost BASE_PORT=8080 ADMIN_IDS=123,234,345,456 USER_JSON={"Alice": {"ID": 100}, "Bob": {"ID": 200}} 

The following code will be generated automatically Go Package.

$ goenvgen -p envgen .env Generated envgen Packages. $ tree envgen envgen ├── USER_JSON.go └── envgen.go 

About generated package

This package itself does not read environment variables from dotenv, so joho/godotenv is required if you want to use .env file.

This is because it may control whether the dotenv file is loaded in the production and development environments.

Example Codes:

package main import ( "fmt" "log" "github.com/joho/godotenv" "[Your package path]/envgen" ) func main() { // Loading .env file err := godotenv.Load() if err != nil { log.Fatal("Error loading .env file")	} // Setup envgen package from environment variables err = envgen.Load() if err != nil { log.Fatal(err)	} // Getting Environment Variables host := envgen.Get().BASE_HOST() port := envgen.Get().BASE_PORT() fmt.Printf("Running to http://%s:%d/", host, port) // Slice Type ids := envgen.Get().ADMIN_IDS() for _, id := range ids { fmt.Printf("ID: %d \r\n", id)	} // JSON Type user := envgen.Get().USER_JSON() fmt.Printf("Bod ID: %d \r\n", user.Bob.ID) }

Results:

$ go run main.go Running to http://localhost:8080/ ID: 123 ID: 234 ID: 345 ID: 456 Bob ID: 200

Enjoy Development!

Details

Usage of envgen: -p string the name of the package for the generated code (default "envgen") -r string Required Type setting (example: "-r ENV_REQ_BOOL,ENV_REQ_STRING") -t string Manually type definition setting (example: "-t ENV_BOOL=bool,ENV_S_INT=[]int") 

Automatic determination of type

At the time of code generation, the type is automatically assigned from the values in the .env file.

Automatic generation is generated by the following rule.

value is Type ... Example
JSON strings Generate struct for ChimeraCoder/gojson '{"Alice": {"ID": 100}, "Bob": {"ID": 200}}'
true or false boolean 'true'
integral number int64 '123'
floating point number float64 '1.1'
true or false with comma []boolean 'true,false'
integral number with comma []int64 '100,200'
floating point number with comma []float64 '0.1,0.2'
charactor with comma []string 'string1,string2'
otherwise string 'string'

Manual determination of type

The type can be set manually by specifying the -t option when generating the code.

The types that can be set are bool, int, int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32, float64, interface, and string. or their slice types.

Example:

goenvgen -p envgen -t BASE_PORT=uint16,ADMIN_IDS=[]int 

Required Environment Variable

You can make the value required by specifying the -r option when generating the code.

Example:

BASE_HOST= BASE_PORT=8080 
goenvgen -p envgen -r BASE_HOST,BASE_PORT 
$ go run .\main.go BASE_HOST is required

Development & Contributing

Contributions are most welcome!

$ git clone https://https://github.com/potproject/goenvgen.git # Code Generating Test $ cd test $ vi .env.test # Change .env.test File $ go run main.go $ go test ./envgentest/

License

MIT License

About

Automatically generate Go Code from dotenv files.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages