Need help with aconfig?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

cristalhq
177 Stars 9 Forks MIT License 88 Commits 2 Opened issues

Description

Simple, useful and opinionated config loader.

Services available

!
?

Need anything else?

Contributors list

aconfig

build-img pkg-img reportcard-img coverage-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 will as much as possible and be easy to use and understand. 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 this sources.

Features

  • Simple API.
  • Clean and tested code.
  • Automatic fields mapping.
  • Supports different sources:
    • defaults in the code
    • files (JSON, YAML, TOML, DotENV, HCL)
    • environment variables
    • command-line flags
  • Dependency-free (file parsers are optional).
  • Ability to walk over configuration fields.

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 `default:"def-user"`
        Pass string `default:"def-pass"`
    }
    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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.