config: github.com/gookit/config Index | Examples | Files | Directories

package config

import "github.com/gookit/config"

Package config is a go config management implement. support YAML,TOML,JSON,INI,HCL format.

Source code and other details for the project are available at GitHub:

https://github.com/gookit/config

JSON format content example:

{
	"name": "app",
	"debug": false,
	"baseKey": "value",
	"age": 123,
	"envKey": "${SHELL}",
	"envKey1": "${NotExist|defValue}",
	"map1": {
		"key": "val",
		"key1": "val1",
		"key2": "val2"
	},
	"arr1": [
		"val",
		"val1",
		"val2"
	],
	"lang": {
		"dir": "res/lang",
		"defLang": "en",
		"allowed": {
			"en": "val",
			"zh-CN": "val2"
		}
	}
}

Usage please see example(more example please see examples folder in the lib):

Code:

WithOptions(ParseEnv)

// add Decoder and Encoder
// use yaml github.com/gookit/config/yaml
// AddDriver(Yaml, yaml.Driver)
// use toml github.com/gookit/config/toml
// AddDriver(Toml, toml.Driver)
// use toml github.com/gookit/config/hcl
// AddDriver(Hcl, hcl.Driver)
// Or
// config.DecoderEncoder(config.JSON, yaml.Decoder, yaml.Encoder)

err := LoadFiles("testdata/json_base.json")
if err != nil {
    panic(err)
}

// fmt.Printf("config data: \n %#v\n", Data())

err = LoadFiles("testdata/json_other.json")
// LoadFiles("testdata/json_base.json", "testdata/json_other.json")
if err != nil {
    panic(err)
}

// load from string
err = LoadSources(JSON, []byte(jsonStr))
if err != nil {
    panic(err)
}

// fmt.Printf("config data: \n %#v\n", Data())
fmt.Print("get config example:\n")

name := String("name")
fmt.Printf("- get string\n val: %v\n", name)

arr1 := Strings("arr1")
fmt.Printf("- get array\n val: %#v\n", arr1)

val0 := String("arr1.0")
fmt.Printf("- get sub-value by path 'arr.index'\n val: %#v\n", val0)

map1 := StringMap("map1")
fmt.Printf("- get map\n val: %#v\n", map1)

val0 = String("map1.key")
fmt.Printf("- get sub-value by path 'map.key'\n val: %#v\n", val0)

// can parse env name(ParseEnv: true)
fmt.Printf("get env 'envKey' val: %s\n", String("envKey", ""))
fmt.Printf("get env 'envKey1' val: %s\n", String("envKey1", ""))

// set value
_ = Set("name", "new name")
name = String("name")
fmt.Printf("- set string\n val: %v\n", name)

// if you want export config data
// buf := new(bytes.Buffer)
// _, err = config.DumpTo(buf, config.JSON)
// if err != nil {
// 	panic(err)
// }
// fmt.Printf("export config:\n%s", buf.String())

// Out:
// get config example:
// - get string
//  val: app
// - get array
//  val: []string{"val", "val1", "val2"}
// - get sub-value by path 'arr.index'
//  val: "val"
// - get map
//  val: map[string]string{"key":"val", "key1":"val1", "key2":"val2"}
// - get sub-value by path 'map.key'
//  val: "val"
// get env 'envKey' val: /bin/zsh
// get env 'envKey1' val: defValue
// - set string
//  val: new name

Code:

// Notice: before dump please set driver encoder
// SetEncoder(Yaml, yaml.Encoder)

ClearAll()
// load from string
err := LoadStrings(JSON, `{
"name": "app",
"age": 34
}`)
if err != nil {
    panic(err)
}

buf := new(bytes.Buffer)
_, err = DumpTo(buf, JSON)
if err != nil {
    panic(err)
}

fmt.Printf("%s", buf.String())

Output:

{"age":34,"name":"app"}

Index

Examples

Package Files

config.go export.go json_driver.go load.go read.go write.go

Constants

const (
    Ini  = "ini"
    Hcl  = "hcl"
    Yml  = "yml"
    JSON = "json"
    Yaml = "yaml"
    Toml = "toml"
)

There are supported config format

Variables

var JSONAllowComments = true

JSONAllowComments support write comments on json file.

var JSONDriver = &jsonDriver{name: JSON}

JSONDriver instance fot json

func AddDriver Uses

func AddDriver(driver Driver)

AddDriver set a decoder and encoder driver for a format.

func BindStruct Uses

func BindStruct(key string, dst interface{}) error

BindStruct alias method of the 'Structure'

func Bool Uses

func Bool(key string, defVal ...bool) bool

Bool get a bool value, if not found return default value

func ClearAll Uses

func ClearAll()

ClearAll data and caches

func Data Uses

func Data() map[string]interface{}

Data return all config data

func Delimiter Uses

func Delimiter(sep byte) func(*Options)

Delimiter set delimiter char

func DumpTo Uses

func DumpTo(out io.Writer, format string) (int64, error)

DumpTo a writer and use format

func EnableCache Uses

func EnableCache(opts *Options)

EnableCache set readonly

func Exists Uses

func Exists(key string, findByPath ...bool) bool

Exists key exists check

func Float Uses

func Float(key string, defVal ...float64) float64

Float get a float64 value, if not found return default value

func Get Uses

func Get(key string, findByPath ...bool) interface{}

Get config value by key string, support get sub-value by key path(eg. 'map.key'), ok is true, find value from config ok is false, not found or error

func GetEnv Uses

func GetEnv(name string, defVal ...string) (val string)

GetEnv get os ENV value by name Deprecated

please use Getenv() instead

func GetValue Uses

func GetValue(key string, findByPath ...bool) (interface{}, bool)

GetValue get value by given key string.

func Getenv Uses

func Getenv(name string, defVal ...string) (val string)

Getenv get os ENV value by name. like os.Getenv, but support default value Notice: - Key is not case sensitive when getting

func Int Uses

func Int(key string, defVal ...int) int

Int get a int by key

func Int64 Uses

func Int64(key string, defVal ...int64) int64

Int64 get a int value, if not found return default value

func IntMap Uses

func IntMap(key string) map[string]int

IntMap get config data as a map[string]int

func Ints Uses

func Ints(key string) []int

Ints get config data as a int slice/array

func LoadData Uses

func LoadData(dataSource ...interface{}) error

LoadData load one or multi data

func LoadExists Uses

func LoadExists(sourceFiles ...string) error

LoadExists load one or multi files, will ignore not exist

func LoadFiles Uses

func LoadFiles(sourceFiles ...string) error

LoadFiles load one or multi files

func LoadFlags Uses

func LoadFlags(keys []string) error

LoadFlags load data from cli flags

func LoadOSEnv Uses

func LoadOSEnv(keys []string, keyToLower bool)

LoadOSEnv load data from OS ENV

func LoadRemote Uses

func LoadRemote(format, url string) error

LoadRemote load config data from remote URL.

func LoadSources Uses

func LoadSources(format string, src []byte, more ...[]byte) error

LoadSources load one or multi byte data

func LoadStrings Uses

func LoadStrings(format string, str string, more ...string) error

LoadStrings load one or multi string

func MapStruct Uses

func MapStruct(key string, dst interface{}) error

MapStruct alias method of the 'Structure'

func ParseEnv Uses

func ParseEnv(opts *Options)

ParseEnv set parse env

func Readonly Uses

func Readonly(opts *Options)

Readonly set readonly

func Set Uses

func Set(key string, val interface{}, setByPath ...bool) error

Set val by key

func SetDecoder Uses

func SetDecoder(format string, decoder Decoder)

SetDecoder add/set a format decoder

func SetEncoder Uses

func SetEncoder(format string, encoder Encoder)

SetEncoder set a encoder for the format

func String Uses

func String(key string, defVal ...string) string

String get a string by key

func StringMap Uses

func StringMap(key string) map[string]string

StringMap get config data as a map[string]string

func Strings Uses

func Strings(key string) []string

Strings get strings by key

func Uint Uses

func Uint(key string, defVal ...uint) uint

Uint get a uint value, if not found return default value

func WithOptions Uses

func WithOptions(opts ...func(*Options))

WithOptions with options

func WriteTo Uses

func WriteTo(out io.Writer) (int64, error)

WriteTo a writer

type Config Uses

type Config struct {
    // contains filtered or unexported fields
}

Config structure definition

func Default Uses

func Default() *Config

Default get the default instance

func New Uses

func New(name string) *Config

New config instance

func NewEmpty Uses

func NewEmpty(name string) *Config

NewEmpty config instance

func NewWithOptions Uses

func NewWithOptions(name string, opts ...func(*Options)) *Config

NewWithOptions config instance

func (*Config) AddDriver Uses

func (c *Config) AddDriver(driver Driver)

AddDriver set a decoder and encoder driver for a format.

func (*Config) BindStruct Uses

func (c *Config) BindStruct(key string, dst interface{}) error

BindStruct alias method of the 'Structure'

func (*Config) Bool Uses

func (c *Config) Bool(key string, defVal ...bool) (value bool)

Bool looks up a value for a key in this section and attempts to parse that value as a boolean, along with a boolean result similar to a map lookup. of following(case insensitive):

- true
- yes
- false
- no
- 1
- 0

The `ok` boolean will be false in the event that the value could not be parsed as a bool

func (*Config) ClearAll Uses

func (c *Config) ClearAll()

ClearAll data and caches

func (*Config) ClearCaches Uses

func (c *Config) ClearCaches()

ClearCaches clear caches

func (*Config) ClearData Uses

func (c *Config) ClearData()

ClearData clear data

func (*Config) Data Uses

func (c *Config) Data() map[string]interface{}

Data get all config data

func (*Config) DelDriver Uses

func (c *Config) DelDriver(format string)

DelDriver delete driver of the format

func (*Config) DumpTo Uses

func (c *Config) DumpTo(out io.Writer, format string) (n int64, err error)

DumpTo use the format(json,yaml,toml) dump config data to a writer

func (*Config) Error Uses

func (c *Config) Error() error

Error get last error

func (*Config) Exists Uses

func (c *Config) Exists(key string, findByPath ...bool) (ok bool)

Exists key exists check

func (*Config) Float Uses

func (c *Config) Float(key string, defVal ...float64) (value float64)

Float get a float64 by key

func (*Config) Get Uses

func (c *Config) Get(key string, findByPath ...bool) interface{}

Get config value by key

func (*Config) GetValue Uses

func (c *Config) GetValue(key string, findByPath ...bool) (value interface{}, ok bool)

GetValue get value by given key string.

func (*Config) HasDecoder Uses

func (c *Config) HasDecoder(format string) bool

HasDecoder has decoder

func (*Config) HasEncoder Uses

func (c *Config) HasEncoder(format string) bool

HasEncoder has encoder

func (*Config) Int Uses

func (c *Config) Int(key string, defVal ...int) (value int)

Int get a int value, if not found return default value

func (*Config) Int64 Uses

func (c *Config) Int64(key string, defVal ...int64) (value int64)

Int64 get a int value, if not found return default value

func (*Config) IntMap Uses

func (c *Config) IntMap(key string) (mp map[string]int)

IntMap get config data as a map[string]int

func (*Config) Ints Uses

func (c *Config) Ints(key string) (arr []int)

Ints get config data as a int slice/array

func (*Config) IsEmpty Uses

func (c *Config) IsEmpty() bool

IsEmpty of the config

func (*Config) LoadData Uses

func (c *Config) LoadData(dataSources ...interface{}) (err error)

LoadData load data from map OR struct The dataSources can be:

- map[string]interface{}

func (*Config) LoadExists Uses

func (c *Config) LoadExists(sourceFiles ...string) (err error)

LoadExists load and parse config files, but will ignore not exists file.

func (*Config) LoadFiles Uses

func (c *Config) LoadFiles(sourceFiles ...string) (err error)

LoadFiles load and parse config files

func (*Config) LoadFlags Uses

func (c *Config) LoadFlags(keys []string) (err error)

LoadFlags parse command line arguments, based on provide keys. Usage:

// debug flag is bool type
c.LoadFlags([]string{"env", "debug:bool"})

func (*Config) LoadOSEnv Uses

func (c *Config) LoadOSEnv(keys []string, keyToLower bool)

LoadOSEnv load data from os ENV

func (*Config) LoadRemote Uses

func (c *Config) LoadRemote(format, url string) (err error)

LoadRemote load config data from remote URL. Usage:

c.LoadRemote(config.JSON, "http://abc.com/api-config.json")

func (*Config) LoadSources Uses

func (c *Config) LoadSources(format string, src []byte, more ...[]byte) (err error)

LoadSources load data from byte content. Usage:

config.LoadSources(config.Yml, []byte(`
name: blog
arr:
	key: val

`))

func (*Config) LoadStrings Uses

func (c *Config) LoadStrings(format string, str string, more ...string) (err error)

LoadStrings load data from source string content.

func (*Config) LoadedFiles Uses

func (c *Config) LoadedFiles() []string

LoadedFiles get loaded files name

func (*Config) MapStruct Uses

func (c *Config) MapStruct(key string, dst interface{}) error

MapStruct alias method of the 'Structure'

func (*Config) Name Uses

func (c *Config) Name() string

Name get config name

func (*Config) Options Uses

func (c *Config) Options() *Options

Options get

func (*Config) Readonly Uses

func (c *Config) Readonly()

Readonly disable set data to config. Usage:

config.LoadFiles(a, b, c)
config.Readonly()

func (*Config) Set Uses

func (c *Config) Set(key string, val interface{}, setByPath ...bool) (err error)

Set a value by key string.

func (*Config) SetDecoder Uses

func (c *Config) SetDecoder(format string, decoder Decoder)

SetDecoder set decoder

func (*Config) SetDecoders Uses

func (c *Config) SetDecoders(decoders map[string]Decoder)

SetDecoders set decoders

func (*Config) SetEncoder Uses

func (c *Config) SetEncoder(format string, encoder Encoder)

SetEncoder set a encoder for the format

func (*Config) SetEncoders Uses

func (c *Config) SetEncoders(encoders map[string]Encoder)

SetEncoders set encoders

func (*Config) String Uses

func (c *Config) String(key string, defVal ...string) string

String get a string by key, if not found return default value

func (*Config) StringMap Uses

func (c *Config) StringMap(key string) (mp map[string]string)

StringMap get config data as a map[string]string

func (*Config) Strings Uses

func (c *Config) Strings(key string) (arr []string)

Strings get config data as a string slice/array

func (*Config) Structure Uses

func (c *Config) Structure(key string, dst interface{}) (err error)

Structure get config data and binding to the dst structure. Usage:

dbInfo := Db{}
config.Structure("db", &dbInfo)

func (*Config) ToJSON Uses

func (c *Config) ToJSON() string

ToJSON string

func (*Config) Uint Uses

func (c *Config) Uint(key string, defVal ...uint) (value uint)

Uint get a int value, if not found return default value

func (*Config) WithOptions Uses

func (c *Config) WithOptions(opts ...func(*Options))

WithOptions apply some options

func (*Config) WriteTo Uses

func (c *Config) WriteTo(out io.Writer) (n int64, err error)

WriteTo Write out config data representing the current state to a writer.

type Decoder Uses

type Decoder func(blob []byte, v interface{}) (err error)

Decoder for decode yml,json,toml format content

var JSONDecoder Decoder = func(data []byte, v interface{}) (err error) {
    if JSONAllowComments {
        str := jsonutil.StripComments(string(data))
        return json.Unmarshal([]byte(str), v)
    }

    return json.Unmarshal(data, v)
}

JSONDecoder for json decode

type Driver Uses

type Driver interface {
    Name() string
    GetDecoder() Decoder
    GetEncoder() Encoder
}

Driver interface

type Encoder Uses

type Encoder func(v interface{}) (out []byte, err error)

Encoder for decode yml,json,toml format content

var JSONEncoder Encoder = json.Marshal

JSONEncoder for json encode

type Options Uses

type Options struct {
    // parse env value. like: "${EnvName}" "${EnvName|default}"
    ParseEnv bool
    // config is readonly
    Readonly bool
    // enable config data cache
    EnableCache bool
    // parse key, allow find value by key path. eg: 'key.sub' will find `map[key]sub`
    ParseKey bool
    // the delimiter char for split key path, if `FindByPath=true`. default is '.'
    Delimiter byte
    // default write format
    DumpFormat string
    // default input format
    ReadFormat string
}

Options config options

func GetOptions Uses

func GetOptions() *Options

GetOptions get options

Directories

PathSynopsis
dotnevPackage dotnev provide load .env data to os ENV
_examplesThese are some sample code for YAML,TOML,JSON,INI,HCL
hclPackage hcl is driver use HCL format content as config source
iniPackage ini is driver use INI format content as config source
jsonPackage json use the https://github.com/json-iterator/go for parse json
tomlPackage toml is driver use TOML format content as config source
yamlPackage yaml is a driver use YAML format content as config source

Package config imports 18 packages (graph) and is imported by 5 packages. Updated 2020-07-11. Refresh now. Tools for package owners.