Dead-simple configuration loader.
It supports:
- JSON, TOML, YAML and you could add your own format unmarshaler (see
Unmarshaler
type) - file, reader and environment sources support, also you could add your own (see
Option
type andsources.go
) - extendable postprocessing support (defaults, validation, expansion, see
Option
type andpostprocess.go
) - dot-notation to access configuration keys
Basic example showing basics about configuration loading:
- default values
- validation rules
- config expansion (loading
key
from file) - working with nested types
- unmarshaling from JSON, YAML, TOML
$ cd ./example/basic
$ go run ./main.go
(main.Config) {
SerialNumber: (int) 1,
Nested: (*main.NestedConfig)(0xc00000e0c0)({
Value: (string) (len=11) "hello world",
Flag: (bool) false
}),
MapNested: (map[string]*main.NestedConfig) {
},
SliceNested: ([]*main.NestedConfig) {
},
StringSlice: ([]string) <nil>,
IntSlice: ([]int) (len=3 cap=3) {
(int) 666,
(int) 777,
(int) 888
},
key: (string) (len=18) "super secret value"
}
Run basic example with some keys befined through environment variables:
environment variables are defined in
makefile
$ make
(main.Config) {
SerialNumber: (int) 2,
Nested: (*main.NestedConfig)(0xc00000e0c0)({
Value: (string) (len=12) "\"hello user\"",
Flag: (bool) false
}),
MapNested: (map[string]*main.NestedConfig) {
},
SliceNested: ([]*main.NestedConfig) {
},
StringSlice: ([]string) <nil>,
IntSlice: ([]int) (len=3 cap=3) {
(int) 888,
(int) 777,
(int) 666
},
key: (string) (len=18) "super secret value"
}