aconfig

package module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2020 License: MIT Imports: 11 Imported by: 73

README

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)

Install

Go version 1.14+

go get github.com/cristalhq/aconfig

Example

type MyConfig struct {
	Port int `default:"1111"`
	Auth struct {
		User string `default:"def-user"`
		Pass string `default:"def-pass"`
	}
}

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: this above

Documentation

See here: pkgo.dev.

License

MIT License.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Loader

type Loader struct {
	// contains filtered or unexported fields
}

Loader of user configuration.

func LoaderFor added in v0.2.1

func LoaderFor(src interface{}) *Loader

Loader creates a new Loader based on a config. Zero-value config is acceptable.

func (*Loader) Build added in v0.2.1

func (l *Loader) Build() *Loader

func (*Loader) Flags added in v0.1.2

func (l *Loader) Flags() *flag.FlagSet

func (*Loader) Load

func (l *Loader) Load(into interface{}) error

Load configuration into a given param.

func (*Loader) LoadWithFiles added in v0.1.2

func (l *Loader) LoadWithFiles(into interface{}, files []string) error

LoadWithFiles configuration into a given param.

func (*Loader) SkipDefaults added in v0.2.1

func (l *Loader) SkipDefaults() *Loader

func (*Loader) SkipEnvironment added in v0.2.1

func (l *Loader) SkipEnvironment() *Loader

func (*Loader) SkipFiles added in v0.2.1

func (l *Loader) SkipFiles() *Loader

func (*Loader) SkipFlags added in v0.2.1

func (l *Loader) SkipFlags() *Loader

func (*Loader) WithEnvPrefix added in v0.2.1

func (l *Loader) WithEnvPrefix(prefix string) *Loader

func (*Loader) WithFiles added in v0.2.1

func (l *Loader) WithFiles(files []string) *Loader

func (*Loader) WithFlagPrefix added in v0.2.1

func (l *Loader) WithFlagPrefix(prefix string) *Loader

Directories

Path Synopsis
aconfighcl module
aconfigtoml module
aconfigyaml module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳