aconfig

package module
v0.1.2 Latest Latest
Warning

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

Go to latest
Published: Jul 23, 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.NewLoader(aconfig.LoaderConfig{
	// feel free to skip some steps :)
	// SkipDefaults: true,
	// SkipFile: true,
	// SkipEnv:  true,
	// SkipFlag: true,

	Files:       []string{"file.json", "ouch.yaml"},
	FlagPrefix:  "app",
	EnvPrefix:   "APP",
})

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 NewLoaderFor added in v0.1.2

func NewLoaderFor(cfg interface{}, config LoaderConfig) *Loader

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

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.

type LoaderConfig

type LoaderConfig struct {
	SkipDefaults bool
	SkipFile     bool
	SkipEnv      bool
	SkipFlag     bool

	EnvPrefix  string
	FlagPrefix string

	Files []string
}

LoaderConfig to configure configuration 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 🇻🇳