2
0
Golang library for reading configurations from JSON, YAML files, environment variables and command line.
Go to file
2017-12-13 09:33:21 +08:00
cli add comments 2017-12-12 16:00:34 +08:00
env add comments 2017-12-12 16:00:34 +08:00
test add comments 2017-12-12 16:00:34 +08:00
utils add comments 2017-12-12 16:00:34 +08:00
.gitignore Pre 1.0 version 2017-12-11 17:14:53 +08:00
config_test.go add comments 2017-12-12 16:00:34 +08:00
config.go add comments 2017-12-12 16:00:34 +08:00
LICENSE Initial commit 2017-12-06 17:11:17 +08:00
README.md Update README.md 2017-12-13 09:33:21 +08:00

Introduction

config is a simple golang library and designed to read configurations from JSON, Yaml files, environment variables and command line. config depends on go-yaml to anlayze Yaml file and uses built-in golang library to handle JSON file.

Installation

  1. Install Yaml library first:
go get gopkg.in/yaml.v2
  1. Install config library:
go get github.com/eschao/config

Usage

I. Define configuration name in structure tags

Like JSON, Yaml, config uses tags to define configurations:

Tag Example Function
json Host string json:"host" Maps Host to a JSON field: host
yaml Host string yaml:"host" Maps Host to a Yaml field: host
env Host string env:"HOST" Maps Host to a Environment variable: HOST
cli Host string cli:"host database host" Maps Host to a command line argument: -host or --host
default Port int default:"8080" Defines the port with default value: 8080

1. Data types

config supports the following golang data types:

  • bool
  • string
  • int8, int16, int, int32, int64
  • uint8, uint16, uint, uint32, uint64
  • float32, float64
  • slice type. e.g: []string, []int ...

2. Defines default values

Using default keyword in structure tags to define default value. Example codes:

  type Log struct {
    Path  string `default:"/var/logs"`
    Level string `default:"debug"`
  }

After that, calls config.ParseDefault(interface{}) to set structure instance with default values. Example codes:

  logConfig := Log{}
  config.ParseDefault(&logConfig)

3. Defines configruation name for JSON

Like parsing JSON object, using json keyword to define configuration name

  type Database struct {
    Host string     `json:"host"`
    Port int        `json:"port"`
    Username string `json:"username" default:"admin"`
    Password string `json:"password" default:"admin"`
    Log Log         `json:"log"`
  }

4. Defines configuration name for Yaml

Like parsing Yaml object, using yaml keyword to define configuration name

  type Database struct {
    Host string     `yaml:"host"`
    Port int        `yaml:"port"`
    Username string `yaml:"username" default:"admin"`
    Password string `yaml:"password" default:"admin"`
    Log Log         `yaml:"log"`
  }

5. Defines configuration name for Environment variable

Using env keyword to define configuration name

  type Database struct {
    Host string     `env:"DB_HOST"`
    Port int        `env:"DB_PORT"`
    Username string `env:"DB_USER" default:"admin"`
    Password string `env:"DB_PASSWORD" default:"admin"`
    Log Log         `env:"DB_LOG_"`
  }

6. Defines configuration name for Command line

Using cli keyword to define configuration name

  type Database struct {
    Host string     `cli:"host database host name"`
    Port int        `cli:"port database port"`
    Username string `cli:"username database username" default:"admin"`
    Password string `cli:"password database password" default:"admin"`
    Log Log         `cli:"log database log configurations"`
  }

III. Reads configurations from JSON and Yaml files

1. Using json to define configuration name
2. Using yaml to define configuration name
  type Database struct {
    Host string     `yaml:"host"`
    Port int        `yaml:"port"`
    Username string `yaml:"username" default:"admin"`
    Password string `yaml:"password" default:"admin"`
    Log Log         `yaml:"log"`
  }

Parsing configurations from JSON:

  dbConfig := Database{}
  config.ParseConfigFile(&dbConfig, "config.json")