It lets you define a set of default parameters, and extend them for different deployment environments (development, qa, staging, production, etc.).
$ mkdir config $ vi config/default.json{ "name": "app-name", "dbConfig": { "host": "localhost", "port": 1 } } $ vi config/production.json{ "dbConfig": { "host": "prod-db-server" } } $ vi config/local-production.json{ "dbConfig": { "port": 8000 } }Use configs in your code:
import ( gonfig "github.com/eduardbcom/gonfig" ) type Config struct { DbConfig struct { Host string `json:"host"` Port int `json:"port"` } `json:"dbConfig"` Name string `json:"name"` } appConfig := &Config{} if rawData, err := gonfig.Read(); err != nil { panic(err) } else { if err := json.Unmarshal(rawData, appConfig); err != nil { panic(err) } else { fmt.Printf( "{\"name\": \"%s\", \"dbConfig\": {\"host\": \"%s\", port: \"%d\"}}\n", appConfig.Name, appConfig.DbConfig.Host, appConfig.DbConfig.Port ) // {"name": "new-awesome-name", "dbConfig": {"host": "prod-db-server", port: "1"}} } }$ export APP_ENV=production $ go run app.go --config='{"name": "new-app-name"}'Only json file format is supported.
In order to validate configuration using json schema format you need to create schema folder and pass it via --schema_dir param. By default library searches schema folder near the application executable file and silently skips schema verification in case folder does not exist.
schema/index.json is the entry point of schema.
Only draft-04 is supported. Under the hood validate-json is used for schema validation.
See the example folder.