gookit/config - Go 应用配置管理,支持多种格式,多文件加载,数据合并,解析环境变量名,绑定到结构体等等
Github: https://github.com/gookit/config
JSON
(默认), JSON5
, INI
, Properties
, YAML
, TOML
, HCL
, ENV
, Flags
JSON
内容支持注释,可以设置解析时清除注释flags
)设置配置数据set.value
, set.data
, load.data
, clean.data
config.BindStruct("key", &s)
default
解析并设置默认值.
分隔符来按路径获取子级值,也支持自定义分隔符。e.g map.key
arr.2
shell: ${SHELL}
-> shell: /bin/zsh
Get
Int
Uint
Int64
String
Bool
Ints
IntMap
Strings
StringMap
...Github: https://github.com/gookit/config
这里使用 yaml 格式内容作为示例:
name: app2 debug: false baseKey: value2 shell: ${SHELL} envKey1: ${NotExist|defValue} map1: key: val2 key2: val20 arr1: - val1 - val21
示例代码请看 _examples/yaml.go:
package main import ( "github.com/gookit/config/v2" "github.com/gookit/config/v2/yamlv3" ) // go run ./examples/yaml.go func main() { // 设置选项支持 ENV 解析 config.WithOptions(config.ParseEnv) // 添加驱动程序以支持 yaml 内容解析(除了 JSON 是默认支持,其他的则是按需使用) config.AddDriver(yamlv3.Driver) // 加载配置,可以同时传入多个文件 err := config.LoadFiles("testdata/yml_base.yml") if err != nil { panic(err) } // fmt.Printf("config data: \n %#v\n", config.Data()) // 加载更多文件 err = config.LoadFiles("testdata/yml_other.yml") // 也可以一次性加载多个文件 // err := config.LoadFiles("testdata/yml_base.yml", "testdata/yml_other.yml") if err != nil { panic(err) } }
注意:结构体默认的绑定映射 tag 是
mapstructure
,可以通过设置Options.TagName
来更改它
user := struct { Age int Kye string UserName string `mapstructure:"user_name"` Tags []int }{} err = config.BindStruct("user", &user) fmt.Println(user.UserName) // inhere
更改结构标签名称
config.WithOptions(func(opt *Options) { opt.TagName = "config" })
将所有配置数据绑定到结构:
config.Decode(&myConf) // 也可以 config.BindStruct("", &myConf)
config.MapOnExists
与BindStruct
一样,但仅当 key 存在时才进行映射绑定
// 获取整型 age := config.Int("age") fmt.Print(age) // 100 // 获取布尔值 val := config.Bool("debug") fmt.Print(val) // true // 获取字符串 name := config.String("name") fmt.Print(name) // inhere // 获取字符串数组 arr1 := config.Strings("arr1") fmt.Printf("%v %#v", arr1) // []string{"val1", "val21"} // 获取字符串 KV 映射 val := config.StringMap("map1") fmt.Printf("%v %#v",val) // map[string]string{"key":"val2", "key2":"val20"} // 值包含 ENV 变量 value := config.String("shell") fmt.Print(value) // /bin/zsh // 通过 key 路径获取值 // from array value := config.String("arr1.0") fmt.Print(value) // "val1" // from map value := config.String("map1.key") fmt.Print(value) // "val2"
// set value config.Set("name", "new name") // get name = config.String("name") fmt.Print(name) // new name
更多使用说明请看 README