config

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 10, 2024 License: MIT Imports: 25 Imported by: 2

Documentation

Index

Constants

View Source
const (
	JSON = "json"
	Yaml = "yaml"
)

There are supported config format

View Source
const (
	OnSetValue   = "set.value"
	OnSetData    = "set.data"
	OnLoadData   = "load.data"
	OnReloadData = "reload.data"
	OnCleanData  = "clean.data"
)

there are some event names for config data changed.

Variables

View Source
var (
	ErrReadonly   = errors.New("the config instance in 'readonly' mode")
	ErrKeyIsEmpty = errors.New("the config key is cannot be empty")
	ErrNotFound   = errors.New("this key does not exist in the config")
)

some common errors definitions

View Source
var YamlDriver = NewDriver("yaml", &yamlSerializer{}).WithAliases("yml")

YamlDriver instance fot yaml

Functions

func AddAlias added in v0.2.0

func AddAlias(format, alias string)

AddAlias add alias for a format(driver name)

func AddDriver added in v0.2.0

func AddDriver(driver Driver)

AddDriver set a decoder and encoder driver for a format.

func BindStruct added in v0.2.0

func BindStruct(key string, dst any) error

BindStruct alias method of the 'Structure'

func Bool added in v0.2.0

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

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

func ClearAll added in v0.2.0

func ClearAll()

ClearAll data and caches

func Data added in v0.2.0

func Data() map[string]any

Data return all config data

func Decode added in v0.2.0

func Decode(dst any) error

Decode all config data to the dst ptr

Usage:

myConf := &MyConf{}
config.Decode(myConf)

func Delimiter added in v0.2.0

func Delimiter(sep byte) func(*Options)

Delimiter set delimiter char

func DumpTo added in v0.2.0

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

DumpTo a writer and use format

func Duration added in v0.2.0

func Duration(key string, defVal ...time.Duration) time.Duration

Duration get a time.Duration type value. if not found return default value

func EnableCache added in v0.2.0

func EnableCache(opts *Options)

EnableCache set readonly

func Exists added in v0.2.0

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

Exists key exists check

func Float added in v0.2.0

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

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

func Get added in v0.2.0

func Get(key string, findByPath ...bool) any

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 added in v0.2.0

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

GetEnv get os ENV value by name

func GetValue added in v0.2.0

func GetValue(key string, findByPath ...bool) (any, bool)

GetValue get value by given key string.

func Getenv added in v0.2.0

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 added in v0.2.0

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

Int get an int by key

func Int64 added in v0.2.0

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

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

func IntMap added in v0.2.0

func IntMap(key string) map[string]int

IntMap get config data as a map[string]int

func Ints added in v0.2.0

func Ints(key string) []int

Ints get config data as an int slice/array

func Keys added in v0.2.0

func Keys() []string

Keys return all config data

func LoadData added in v0.2.0

func LoadData(dataSource ...any) error

LoadData load one or multi data

func LoadExists added in v0.2.0

func LoadExists(sourceFiles ...string) error

LoadExists load one or multi files, will ignore not exist

Usage:

config.LoadExists(file1, file2, ...)

func LoadExistsByFormat added in v0.2.0

func LoadExistsByFormat(format string, configFiles ...string) error

LoadExistsByFormat load one or multi files by give format, will fire OnLoadData event

func LoadFiles added in v0.2.0

func LoadFiles(sourceFiles ...string) error

LoadFiles load one or multi files, will fire OnLoadData event

Usage:

config.LoadFiles(file1, file2, ...)

func LoadFilesByFormat added in v0.2.0

func LoadFilesByFormat(format string, configFiles ...string) error

LoadFilesByFormat load one or multi config files by give format, will fire OnLoadData event

func LoadFlags added in v0.2.0

func LoadFlags(keys []string) error

LoadFlags load data from cli flags

func LoadFromDir added in v0.2.0

func LoadFromDir(dirPath, format string, loFns ...LoadOptFn) error

LoadFromDir Load custom format files from the given directory, the file name will be used as the key.

Example:

// file: /somedir/task.json
LoadFromDir("/somedir", "json")

// after load
Config.data = map[string]any{"task": file data}

func LoadOSEnvs added in v0.2.0

func LoadOSEnvs(nameToKeyMap map[string]string)

LoadOSEnvs load data from OS ENVs. format: {ENV_NAME: config_key}

func LoadRemote added in v0.2.0

func LoadRemote(format, url string) error

LoadRemote load config data from remote URL.

func LoadSources added in v0.2.0

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

LoadSources load one or multi byte data

func LoadStrings added in v0.2.0

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

LoadStrings load one or multi string

func MapOnExists added in v0.2.0

func MapOnExists(key string, dst any) error

MapOnExists mapping data to the dst structure only on key exists.

func MapStruct added in v0.2.0

func MapStruct(key string, dst any) error

MapStruct alias method of the 'Structure'

Usage:

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

func MustString added in v0.2.0

func MustString(key string) string

MustString get a string by key, will panic on empty or not exists

func ParseDefault added in v0.2.0

func ParseDefault(opts *Options)

ParseDefault tag value on binding data to struct.

func ParseEnv added in v0.2.0

func ParseEnv(opts *Options)

ParseEnv set parse env value

func ParseTime added in v0.2.0

func ParseTime(opts *Options)

ParseTime set parse time string.

func Readonly added in v0.2.0

func Readonly(opts *Options)

Readonly set readonly

func ReloadFiles added in v0.2.0

func ReloadFiles() error

ReloadFiles reload config data use loaded files

func Reset added in v0.2.0

func Reset()

Reset data and caches

func SaveFileOnSet added in v0.2.0

func SaveFileOnSet(fileName string, format string) func(options *Options)

SaveFileOnSet set hook func, will panic on save error

func Set added in v0.2.0

func Set(key string, val any, setByPath ...bool) error

Set val by key

func SetData added in v0.2.0

func SetData(data map[string]any)

SetData for override the Config.Data

func String added in v0.2.0

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

String get a string by key

func StringMap added in v0.2.0

func StringMap(key string) map[string]string

StringMap get config data as a map[string]string

func Strings added in v0.2.0

func Strings(key string) []string

Strings get strings by key

func StringsBySplit added in v0.2.0

func StringsBySplit(key, sep string) []string

StringsBySplit get []string by split a string value.

func Sub added in v0.2.0

func Sub(key string) map[string]any

Sub return sub config data by key

func SubDataMap added in v0.2.0

func SubDataMap(key string) maputil.Map

SubDataMap get sub config data as maputil.Map

func Uint added in v0.2.0

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

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

func ValDecodeHookFunc added in v0.2.0

func ValDecodeHookFunc(parseEnv, parseTime bool) mapstructure.DecodeHookFunc

ValDecodeHookFunc returns a mapstructure.DecodeHookFunc that parse ENV var, and more custom parse

func WithDriver added in v0.2.0

func WithDriver(drivers ...Driver)

WithDriver set multi drivers at once.

func WithHookFunc added in v0.2.0

func WithHookFunc(fn HookFunc) func(*Options)

WithHookFunc set hook func

func WithOptions added in v0.2.0

func WithOptions(opts ...OptionFn)

WithOptions with options

func WithTagName added in v0.2.0

func WithTagName(tagName string) func(*Options)

WithTagName set tag name for export to struct

func WriteTo added in v0.2.0

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

WriteTo a writer

Types

type Config added in v0.2.0

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

Config structure definition

func Default added in v0.2.0

func Default() *Config

Default get the default instance

func New added in v0.2.0

func New(name string, opts ...OptionFn) *Config

New config instance with custom options, default with JSON driver

func NewEmpty added in v0.2.0

func NewEmpty(name string, opts ...OptionFn) *Config

NewEmpty create config instance with custom options

func NewWith added in v0.2.0

func NewWith(name string, fn func(c *Config)) *Config

NewWith create config instance, and you can call some init func

func NewWithOptions added in v0.2.0

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

NewWithOptions config instance. alias of New()

func (*Config) AddAlias added in v0.2.0

func (c *Config) AddAlias(format, alias string)

AddAlias add alias for a format(driver name)

Example:

config.AddAlias("ini", "conf")

func (*Config) AddDriver added in v0.2.0

func (c *Config) AddDriver(driver Driver)

AddDriver set a decoder and encoder driver for a format.

func (*Config) AliasMap added in v0.2.0

func (c *Config) AliasMap() map[string]string

AliasMap get alias map

func (*Config) BindStruct added in v0.2.0

func (c *Config) BindStruct(key string, dst any) error

BindStruct alias method of the 'Structure'

func (*Config) Bool added in v0.2.0

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 added in v0.2.0

func (c *Config) ClearAll()

ClearAll data and caches

func (*Config) ClearCaches added in v0.2.0

func (c *Config) ClearCaches()

ClearCaches clear caches

func (*Config) ClearData added in v0.2.0

func (c *Config) ClearData()

ClearData clear data

func (*Config) Data added in v0.2.0

func (c *Config) Data() map[string]any

Data get all config data.

Note: will don't apply any options, like ParseEnv

func (*Config) Decode added in v0.2.0

func (c *Config) Decode(dst any) error

Decode all config data to the dst ptr.

It's equals:

c.Structure("", dst)

func (*Config) DelDriver added in v0.2.0

func (c *Config) DelDriver(format string)

DelDriver delete driver of the format

func (*Config) DriverNames added in v0.2.0

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

DriverNames get loaded driver names

func (*Config) DumpTo added in v0.2.0

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) DumpToFile added in v0.2.0

func (c *Config) DumpToFile(fileName string, format string) (err error)

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

func (*Config) Duration added in v0.2.0

func (c *Config) Duration(key string, defVal ...time.Duration) time.Duration

Duration get a time.Duration type value. if not found return default value

func (*Config) Error added in v0.2.0

func (c *Config) Error() error

Error get last error, will clear after read.

func (*Config) Exists added in v0.2.0

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

Exists key exists check

func (*Config) Float added in v0.2.0

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

Float get a float64 by key

func (*Config) Get added in v0.2.0

func (c *Config) Get(key string, findByPath ...bool) any

Get config value by key

func (*Config) GetValue added in v0.2.0

func (c *Config) GetValue(key string, findByPath ...bool) (value any, ok bool)

GetValue get value by given key string.

func (*Config) HasDecoder added in v0.2.0

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

HasDecoder has decoder

func (*Config) HasEncoder added in v0.2.0

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

HasEncoder has encoder

func (*Config) Int added in v0.2.0

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

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

func (*Config) Int64 added in v0.2.0

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

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

func (*Config) IntMap added in v0.2.0

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

IntMap get config data as a map[string]int

func (*Config) Ints added in v0.2.0

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

Ints get config data as an int slice/array

func (*Config) IsEmpty added in v0.2.0

func (c *Config) IsEmpty() bool

IsEmpty of the config

func (*Config) Keys added in v0.2.0

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

Keys get all config data

func (*Config) LoadData added in v0.2.0

func (c *Config) LoadData(dataSources ...any) (err error)

LoadData load data from map OR struct

The dataSources type allow:

  • map[string]any
  • map[string]string

func (*Config) LoadExists added in v0.2.0

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

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

func (*Config) LoadExistsByFormat added in v0.2.0

func (c *Config) LoadExistsByFormat(format string, configFiles ...string) (err error)

LoadExistsByFormat load one or multi files by give format, will fire OnLoadData event

func (*Config) LoadFiles added in v0.2.0

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

LoadFiles load and parse config files, will fire OnLoadData event

func (*Config) LoadFilesByFormat added in v0.2.0

func (c *Config) LoadFilesByFormat(format string, configFiles ...string) (err error)

LoadFilesByFormat load one or multi files by give format, will fire OnLoadData event

func (*Config) LoadFlags added in v0.2.0

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) LoadFromDir added in v0.2.0

func (c *Config) LoadFromDir(dirPath, format string, loFns ...LoadOptFn) (err error)

LoadFromDir Load custom format files from the given directory, the file name will be used as the key.

NOTE: will not be reloaded on call ReloadFiles(), if data loaded by the method.

Example:

// file: /somedir/task.json , will use filename 'task' as key
Config.LoadFromDir("/somedir", "json")

// after load, the data will be:
Config.data = map[string]any{"task": {file data}}

func (*Config) LoadOSEnvs added in v0.2.0

func (c *Config) LoadOSEnvs(nameToKeyMap map[string]string)

LoadOSEnvs load data from os ENVs. format: {ENV_NAME: config_key}

func (*Config) LoadRemote added in v0.2.0

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) LoadSMap added in v0.2.0

func (c *Config) LoadSMap(smp map[string]string)

LoadSMap to config

func (*Config) LoadSources added in v0.2.0

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

LoadSources load data from byte content.

Usage:

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

`))

func (*Config) LoadStrings added in v0.2.0

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

LoadStrings load data from source string content.

func (*Config) LoadedFiles added in v0.2.0

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

LoadedFiles get loaded files name

func (*Config) LoadedUrls added in v0.2.0

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

LoadedUrls get loaded urls list

func (*Config) MapOnExists added in v0.2.0

func (c *Config) MapOnExists(key string, dst any) error

MapOnExists mapping data to the dst structure only on key exists.

  • Support ParseEnv on mapping
  • Support ParseDefault on mapping

func (*Config) MapStruct added in v0.2.0

func (c *Config) MapStruct(key string, dst any) error

MapStruct alias method of the 'Structure'

func (*Config) MustString added in v0.2.0

func (c *Config) MustString(key string) string

MustString get a string by key, will panic on empty or not exists

func (*Config) Name added in v0.2.0

func (c *Config) Name() string

Name get config name

func (*Config) Options added in v0.2.0

func (c *Config) Options() *Options

Options get

func (*Config) Readonly added in v0.2.0

func (c *Config) Readonly()

Readonly disable set data to config.

Usage:

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

func (*Config) ReloadFiles added in v0.2.0

func (c *Config) ReloadFiles() (err error)

ReloadFiles reload config data use loaded files. use on watching loaded files change

func (*Config) Set added in v0.2.0

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

Set a value by key string.

func (*Config) SetData added in v0.2.0

func (c *Config) SetData(data map[string]any)

SetData for override the Config.Data

func (*Config) String added in v0.2.0

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

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

func (*Config) StringMap added in v0.2.0

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

StringMap get config data as a map[string]string

func (*Config) Strings added in v0.2.0

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

Strings get config data as a string slice/array

func (*Config) StringsBySplit added in v0.2.0

func (c *Config) StringsBySplit(key, sep string) (ss []string)

StringsBySplit get []string by split a string value.

func (*Config) Structure added in v0.2.0

func (c *Config) Structure(key string, dst any) (err error)

Structure get config data and binding to the dst structure.

  • Support ParseEnv on mapping
  • Support ParseDefault on mapping

Usage:

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

func (*Config) Sub added in v0.2.0

func (c *Config) Sub(key string) map[string]any

Sub get sub config data by key

Note: will don't apply any options, like ParseEnv

func (*Config) SubDataMap added in v0.2.0

func (c *Config) SubDataMap(key string) maputil.Map

SubDataMap get sub config data as maputil.Map

TIP: will not enable parse Env and more

func (*Config) ToJSON added in v0.2.0

func (c *Config) ToJSON() string

ToJSON string, will ignore error

func (*Config) Uint added in v0.2.0

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

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

func (*Config) With added in v0.2.0

func (c *Config) With(fn func(c *Config)) *Config

With apply some options

func (*Config) WithDriver added in v0.2.0

func (c *Config) WithDriver(drivers ...Driver) *Config

WithDriver set multi drivers at once.

func (*Config) WithOptions added in v0.2.0

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

WithOptions apply some options

func (*Config) WriteTo added in v0.2.0

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

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

type Driver added in v0.2.0

type Driver interface {
	Name() string
	Aliases() []string // alias format names, use for resolve format name
	Serializer
	GetSerializer() Serializer
}

Driver interface.

type HookFunc added in v0.2.0

type HookFunc func(event string, c *Config)

HookFunc on config data changed.

type LoadOptFn added in v0.2.0

type LoadOptFn func(lo *LoadOptions)

LoadOptFn type func

type LoadOptions added in v0.2.0

type LoadOptions struct {
	// DataKey use for load config from dir.
	// see https://github.com/gookit/config/issues/173
	DataKey string
}

LoadOptions for load config from dir.

type OptionFn added in v0.2.0

type OptionFn func(*Options)

OptionFn option func

type Options added in v0.2.0

type Options struct {
	// ParseEnv parse env in string value and default value. like: "${EnvName}" "${EnvName|default}"
	ParseEnv bool
	// ParseTime parses a duration string to time.Duration
	// eg: 10s, 2m
	ParseTime bool
	// Readonly config is readonly
	Readonly bool
	// ParseDefault tag on binding data to struct. tag: default
	ParseDefault bool
	// EnableCache enable config data cache
	EnableCache bool
	// ParseKey parse key path, allow find value by key path. eg: 'key.sub' will find `map[key]sub`
	ParseKey bool

	// Delimiter the delimiter char for split key path, if `FindByPath=true`. default is '.'
	Delimiter byte
	// DumpFormat default write format
	DumpFormat string
	// ReadFormat default input format
	ReadFormat string
	// DecoderConfig setting for binding data to struct. such as: TagName
	DecoderConfig *mapstructure.DecoderConfig
	// HookFunc on data changed. you can do something...
	HookFunc HookFunc
	// MergeOptions settings for merge two data
	MergeOptions []func(*mergo.Config)
}

Options config options

func GetOptions added in v0.2.0

func GetOptions() *Options

GetOptions get options

func (*Options) SetTagName added in v0.2.0

func (o *Options) SetTagName(tagName string)

SetTagName for mapping data to struct

type Serializer added in v0.2.0

type Serializer interface {
	Encode(v any) (out []byte, err error)
	Decode(blob []byte, v any) (err error)
}

type StdDriver added in v0.2.0

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

StdDriver struct

func NewDriver added in v0.2.0

func NewDriver(name string, serializer Serializer) *StdDriver

NewDriver new std driver instance.

func (*StdDriver) Aliases added in v0.2.0

func (d *StdDriver) Aliases() []string

Aliases format name of driver

func (*StdDriver) Decode added in v0.2.0

func (d *StdDriver) Decode(blob []byte, v any) (err error)

Decode of driver

func (*StdDriver) Encode added in v0.2.0

func (d *StdDriver) Encode(v any) ([]byte, error)

Encode of driver

func (*StdDriver) GetSerializer added in v0.2.0

func (d *StdDriver) GetSerializer() Serializer

func (*StdDriver) Name added in v0.2.0

func (d *StdDriver) Name() string

Name of driver

func (*StdDriver) WithAlias added in v0.2.0

func (d *StdDriver) WithAlias(alias string) *StdDriver

WithAlias add alias for driver

func (*StdDriver) WithAliases added in v0.2.0

func (d *StdDriver) WithAliases(aliases ...string) *StdDriver

WithAliases set aliases for driver

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL