Quick and easy way to load config files based on a simple set of rules.
Project inspired by https://github.com/lorenwest/node-config
Before you can load any file you must register parsers using Loader.RegisterParser
.
Each parser has a list of supported extensions that will be used to find files to load.
By default the load will try to find the files based on the environment variable name given to it (defaults to CONFIG_DIR
). If the variable name is empty or the variable value is empty, it will look for files in ./config
.
default.{ext}
{deployment}.{ext}
{hostname}.{ext}
{hostname}-{deployment}.{ext}
local.{ext}
local-{deployment}.{ext}
Where
{ext}
is one of the registered extensions.{deployment}
is the deployment name, from the$ENV
environment variable. (No default value, ignored if empty){hostname}
is the value returned fromos.Hostname()
with no changes. (No default value, ignored if empty)
go get -u github.com/txgruppi/config
package main
import (
"fmt"
"log"
"github.com/txgruppi/config"
"github.com/txgruppi/config/parsers/json"
)
type Config struct {
Server struct {
Bind string `json:"bind"`
Port int `json:"port"`
} `json:"server"`
}
func main() {
loader := NewLoader()
if err := loader.RegisterParser(json.NewParser()); err != nil {
log.Fatal(err)
}
var config Config
info, err := loader.Load(&config)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Looked for files in: %s\n", info.ConfigFolder)
fmt.Printf("Loaded files: %v\n", info.LoadedFiles)
fmt.Printf("Loaded config: %v\n", config)
}