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
287 Stars 20 Forks MIT License 132 Commits 10 Opened issues

Description

Simple, useful and opinionated config loader.

Services available

!
?

Need anything else?

Contributors list

# 29,751
Visual ...
pony-la...
kafka
gRPC
120 commits
# 41,640
Go
golang
kafka
Kuberne...
1 commit
# 3,975
Go
golang
Redis
sockjs
1 commit
# 174,411
Go
golang
depende...
trojan
1 commit
# 42,531
jupyter
pandas
data-ex...
html-re...
1 commit

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.