testdata | ||
conflib.go | ||
conflib_test.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
README.md |
conflib
yet another configuration library
conflib is a small library to load configuration from environment variables or disk. Desired configuration is defined in a struct, then populated from a list of potential files, as well as environment variables.
Let's look at example usage:
package main
import (
"log"
"git.janky.solutions/finn/conflib"
)
type Config struct {
Sample string `env:"SAMP"`
MyExample int `default:"9"`
Nested NestedConfig
}
type NestedConfig struct {
SomeVariable string
}
func main() {
config, err := conflib.Load[Config]("/etc/myapp.json", "myapp.json")
if err != nil {
log.Fatal(err)
}
log.Println("loaded config: ", config)
}
This will attempt to read /etc/myapp.json
and myapp.json
and unmarshal them into a Config
struct. It will also check for environment variables that match the struct field names, unless overwridden. So the Sample
field will be populated from the SAMP
environment variable due to the env
tag on that field. config.MyExample
will be populated from environment variable MY_EXAMPLE
, and config.Nested.SomeVariable
will be
populated by environment variable NESTED_SOME_VARIABLE
. If none of the listed files are found and no environment variables match any field, an error will be returned.