Skip to content

Simple, useful and opinionated config loader.

License

Notifications You must be signed in to change notification settings

dwtcourses/aconfig

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

aconfig

Build Status GoDoc Go Report Card Coverage

Simple, useful and opinionated config loader.

Rationale

There are more than 2000 repositories on Github regarding configuration in Go. I was looking for a simple configuration loader that will automate a lot of things for me. Idea was to load config from 4 common places: defaults (in the code), config files, environment variables, command-line flags. This library works with all of them.

Features

  • Simple API.
  • Automates a lot of things.
  • Opinionated.
  • Supports different sources:
    • defaults in code
    • files (JSON, YAML, TOML)
    • environment variables
    • command-line flags
  • Dependency-free (except file parsers).
  • 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"`
}

loader := aconfig.LoaderFor(&MyConfig{}).
	// feel free to skip some steps :)
	// SkipDefaults().
	// SkipFiles().
	// SkipEnvironment().
	// SkipFlags().
	WithFiles([]string{"file.json", "ouch.yaml"}).
	WithEnvPrefix("APP").
	WithFlagPrefix("app").
	Build()

flagSet := loader.Flags() // now use exactly this flags to define your own

var cfg MyConfig
if err := loader.Load(&cfg); err != nil {
	panic(err)
}

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

Also see examples: examples_test.go or integration with spf13/Cobra using AddGoFlagSet playground

Documentation

See here: pkg.go.dev.

License

MIT License.

About

Simple, useful and opinionated config loader.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%