- Notifications
You must be signed in to change notification settings - Fork0
A minimalist Go configuration library
License
yaraskm/fig
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
fig is a tiny library for loading an application's config file and its environment into a Go struct. Individual fields can have default values defined or be marked as required.
- Define yourconfiguration,validations anddefaults in a single location
- Optionallyload from the environment as well
- Only3 external dependencies
- Full support for
time.Time
,time.Duration
®exp.Regexp
- Tiny API
- Decoders for
.yaml
,.json
and.toml
files
$ go get -d github.com/kkyr/fig
Define your config file:
# config.yamlbuild:"2020-01-09T12:30:00Z"server:ports: -8080cleanup:1hlogger:level:"warn"trace:true
Define your struct along withvalidations ordefaults:
package mainimport ("fmt""github.com/kkyr/fig")typeConfigstruct {Build time.Time`fig:"build" validate:"required"`Serverstruct {Hoststring`fig:"host" default:"127.0.0.1"`Ports []int`fig:"ports" default:"[80,443]"`Cleanup time.Duration`fig:"cleanup" default:"30m"` }Loggerstruct {Levelstring`fig:"level" default:"info"`Pattern*regexp.Regexp`fig:"pattern" default:".*"`Tracebool`fig:"trace"` }}funcmain() {varcfgConfigerr:=fig.Load(&cfg)// handle your errfmt.Printf("%+v\n",cfg)// Output: {Build:2019-12-25 00:00:00 +0000 UTC Server:{Host:127.0.0.1 Ports:[8080] Cleanup:1h0m0s} Logger:{Level:warn Pattern:.* Trace:true}}}
If a field is not set and is marked asrequired then an error is returned. If adefault value is defined instead then that value is used to populate the field.
Fig searches for a file namedconfig.yaml
in the directory it is run from. Change the lookup behaviour by passing additional parameters toLoad()
:
fig.Load(&cfg,fig.File("settings.json"),fig.Dirs(".","/etc/myapp","/home/user/myapp"),)// searches for ./settings.json, /etc/myapp/settings.json, /home/user/myapp/settings.json
Need to additionally fill fields from the environment? It's as simple as:
fig.Load(&cfg,fig.UseEnv("MYAPP"))
See usageexamples.
Seego.dev for detailed documentation.
PRs are welcome! Please explain your motivation for the change in your PR and ensure your change is properly tested and documented.
About
A minimalist Go configuration library
Resources
License
Stars
Watchers
Forks
Packages0
Languages
- Go99.5%
- Makefile0.5%