Golang Go语言中的gookit/config - 应用配置管理,支持多种格式,多文件加载,数据合并,解析环境变量名等
gookit/config - Go 应用配置管理,支持多种格式,多文件加载,数据合并,解析环境变量名,绑定到结构体等等
Github: https://github.com/gookit/config
功能简介
-
支持多种格式:
JSON
(默认),JSON5
,INI
,Properties
,YAML
,TOML
,HCL
,ENV
,Flags
JSON
内容支持注释,可以设置解析时清除注释- 其他驱动都是按需使用,不使用的不会加载编译到应用中
- 支持多个文件、多数据加载
- 支持从 OS ENV 变量数据加载配置
- 支持从远程 URL 加载配置数据
- 支持从命令行参数(
flags
)设置配置数据 -
支持在配置数据更改时触发事件
- 可用事件:
set.value
,set.data
,load.data
,clean.data
- 可用事件:
- 支持数据覆盖合并,加载多份数据时将按 key 自动合并
-
支持将全部或部分配置数据绑定到结构体
config.BindStruct("key", &s)
- NEW: 支持通过结构体标签
default
解析并设置默认值
- NEW: 支持通过结构体标签
- 支持通过
.
分隔符来按路径获取子级值,也支持自定义分隔符。e.gmap.key
arr.2
- 支持解析 ENV 变量名称。like
shell: ${SHELL}
->shell: /bin/zsh
- 简洁的使用 API
Get
Int
Uint
Int64
String
Bool
Ints
IntMap
Strings
StringMap
... - 完善的单元测试(code coverage > 95%)
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
Golang Go语言中的gookit/config - 应用配置管理,支持多种格式,多文件加载,数据合并,解析环境变量名等
更多关于Golang Go语言中的gookit/config - 应用配置管理,支持多种格式,多文件加载,数据合并,解析环境变量名等的实战教程也可以访问 https://www.itying.com/category-94-b0.html
viper 多好
更多关于Golang Go语言中的gookit/config - 应用配置管理,支持多种格式,多文件加载,数据合并,解析环境变量名等的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
有性能测试吗
使用习惯上不太一样
针对Golang中gookit/config的应用配置管理功能,以下是我的专业回复:
gookit/config是一个功能强大的Go应用程序配置管理工具库,它支持多种配置格式,包括但不限于JSON、JSON5、INI、Properties、YAML、TOML、HCL、ENV和Flags等。这一特性使得开发者能够根据需要选择最适合自己项目的配置格式。
除了多格式支持外,gookit/config还具备多文件加载能力,允许开发者从多个配置文件中加载配置数据,并能够自动合并和覆盖这些数据,确保配置的一致性和完整性。此外,它还支持从系统环境变量和远程URL加载配置,进一步提高了配置的灵活性和可管理性。
在数据处理方面,gookit/config支持配置数据变化的事件监听,便于实时响应配置变更。同时,它还支持将配置数据绑定到结构体,从而简化数据处理流程。这些特性使得gookit/config成为了一个高效、灵活且易于使用的配置管理工具。
总的来说,gookit/config凭借其丰富的功能和出色的性能,在Go语言社区中获得了广泛的认可和使用。如果你正在寻找一个强大的配置管理工具来管理你的Go应用程序配置,那么gookit/config无疑是一个值得考虑的选择。