Go configuration made easy!
Requires Go 1.2+ because of differences in Go's flag package.
go get github.com/ian-kent/gofigure
package main
import "github.com/ian-kent/gofigure"
type config struct {
gofigure interface{} `envPrefix:"BAR" order:"flag,env"`
RemoteAddr string `env:"REMOTE_ADDR" flag:"remote-addr" flagDesc:"Remote address"`
LocalAddr string `env:"LOCAL_ADDR" flag:"local-addr" flagDesc:"Local address"`
NumCPU int `env:"NUM_CPU" flag:"num-cpu" flagDesc:"Number of CPUs"`
Sources []string `env:"SOURCES" flag:"source" flagDesc:"Source URL (can be provided multiple times)"`
Numbers []int `env:"NUMBERS" flag:"number" flagDesc:"Number (can be provided multiple times)"`
Advanced struct{
MaxBytes int64 `env:"MAX_BYTES" flag:"max-bytes" flagDesc:"Max bytes"`
MaxErrors int64 `env:"MAX_ERRORS" flag:"max-errors" flagDesc:"Max errors"`
}
}
func main() {
var cfg config
err := gofigure.Gofigure(&cfg)
if err != nil {
log.Fatal(err)
}
// use cfg
}
The gofigure field is used to configure Gofigure.
The order
tag is used to set configuration source order, e.g. environment variables first then command line options second.
Any field matching camelCase
format will be parsed into camel
and case
, and passed to the source matching camel
.
For example, the envPrefix
field is split into env
and prefix
, and the tag value is passed to the environment variable source as the prefix
parameter.
Array support for environment variables is currently experimental.
To enable it, set GOFIGURE_ENV_ARRAY=1
.
When enabled, the environment variable is split on commas, e.g.
struct {
EnvArray []string `env:"MY_ENV_VAR"`
}
MY_ENV_VAR=a,b,c
EnvArray = []string{"a", "b", "c"}
Author: ian-kent
Source Code: https://github.com/ian-kent/gofigure
License: MIT license