Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/koding/multiconfig
Load configuration from multiple sources in Go
https://github.com/koding/multiconfig
Last synced: 5 days ago
JSON representation
Load configuration from multiple sources in Go
- Host: GitHub
- URL: https://github.com/koding/multiconfig
- Owner: koding
- License: mit
- Created: 2014-08-15T14:53:43.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T16:31:32.000Z (almost 2 years ago)
- Last Synced: 2024-12-01T16:07:44.794Z (12 days ago)
- Language: Go
- Homepage: http://godoc.org/github.com/koding/multiconfig
- Size: 102 KB
- Stars: 454
- Watchers: 20
- Forks: 64
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- go-awesome - Multiconfig
README
# Multiconfig [![GoDoc](https://godoc.org/github.com/koding/multiconfig?status.svg)](http://godoc.org/github.com/koding/multiconfig) [![Build Status](https://travis-ci.org/koding/multiconfig.svg?branch=master)](https://travis-ci.org/koding/multiconfig)
Load configuration from multiple sources. Multiconfig makes loading/parsing
from different configuration sources an easy task. The problem with any app is
that with time there are many options how to populate a set of configs.
Multiconfig makes it easy by dynamically creating all necessary options.
Checkout the example below to see it in action.## Features
Multiconfig is able to read configuration automatically based on the given struct's field names from the following sources:
* Struct tags
* TOML file
* JSON file
* YAML file
* Environment variables
* Flags## Install
```bash
go get github.com/koding/multiconfig
```## Usage and Examples
Lets define and struct that defines our configuration
```go
type Server struct {
Name string `required:"true"`
Port int `default:"6060"`
Enabled bool
Users []string
}
```Load the configuration into multiconfig:
```go
// Create a new DefaultLoader without or with an initial config file
m := multiconfig.New()
m := multiconfig.NewWithPath("config.toml") // supports TOML, JSON and YAML// Get an empty struct for your configuration
serverConf := new(Server)// Populated the serverConf struct
err := m.Load(serverConf) // Check for error
m.MustLoad(serverConf) // Panic's if there is any error// Access now populated fields
serverConf.Port // by default 6060
serverConf.Name // "koding"
```Run your app:
```sh
# Sets default values first which are defined in each field tag value.
# Starts to load from config.toml
$ app# Override any config easily with environment variables, environment variables
# are automatically generated in the form of STRUCTNAME_FIELDNAME
$ SERVER_PORT=4000 SERVER_NAME="koding" app# Or pass via flag. Flags are also automatically generated based on the field
# name
$ app -port 4000 -users "gopher,koding"# Print dynamically generated flags and environment variables:
$ app -help
Usage of app:
-enabled=true: Change value of Enabled.
-name=Koding: Change value of Name.
-port=6060: Change value of Port.
-users=[ankara istanbul]: Change value of Users.Generated environment variables:
SERVER_NAME
SERVER_PORT
SERVER_ENABLED
SERVER_USERS
```## License
The MIT License (MIT) - see [LICENSE](/LICENSE) for more details