GitHub - cristalhq/aconfig: Simple, useful and opinionated config loader. (original) (raw)

aconfig

build-img pkg-img version-img

Simple, useful and opinionated config loader.

Rationale

There are many solutions regarding configuration loading in Go. I was looking for a simple loader that is as easy to use and understand as possible. The goal was to load config from 4 places: defaults (in the code), files, environment variables, command-line flags. This library works with all of these sources.

Features

Install

Go version 1.14+

go get github.com/cristalhq/aconfig

Example

type MyConfig struct { Port int default:"1111" usage:"just give a number" Auth struct { User string required:"true" Pass string required:"true" } Pass string default:"" env:"SECRET" flag:"sec_ret" }

var cfg MyConfig loader := aconfig.LoaderFor(&cfg, aconfig.Config{ // feel free to skip some steps :) // SkipDefaults: true, // SkipFiles: true, // SkipEnv: true, // SkipFlags: true, EnvPrefix: "APP", FlagPrefix: "app", Files: []string{"/var/opt/myapp/config.json", "ouch.yaml"}, FileDecoders: map[string]aconfig.FileDecoder{ // from aconfigyaml submodule // see submodules in repo for more formats ".yaml": aconfigyaml.New(), }, })

// IMPORTANT: define your own flags with flagSet flagSet := loader.Flags()

if err := loader.Load(); err != nil { panic(err) }

// configuration fields will be loaded from (in order): // // 1. defaults set in structure tags (see MyConfig defenition) // 2. loaded from files file.json if not ouch.yaml will be used // 3. from corresponding environment variables with the prefix APP_ // 4. command-line flags with the prefix app. if they are

Also see examples: examples_test.go.

Integration with spf13/cobra playground.

Documentation

See these docs.

License

MIT License.