golang基于注解结构体的应用配置管理插件库go-conf的使用
Golang基于注解结构体的应用配置管理插件库go-conf的使用
go-conf是一个用于处理Golang应用程序配置的解决方案,它支持从多个来源读取配置参数,并遵循特定的覆盖顺序。
安装
go get github.com/ThomasObenaus/go-conf
什么是go-conf?
go-conf是一个用于处理Golang应用程序配置的解决方案,它支持从多个来源读取配置参数,覆盖顺序如下:
- 默认值会被配置文件中的参数覆盖
- 配置文件中的参数会被环境变量覆盖
- 环境变量会被命令行参数覆盖
go-conf的目标是编写尽可能少的代码:
- 不需要编写代码来集成多个支持从文件/命令行或环境读取配置的库
- 不需要编写代码来获取这些库的值并填充到你想要在应用程序中使用的配置结构中
相反,你只需要定义配置结构并使用结构标签进行注解。
示例代码
package main
import (
"fmt"
config "github.com/ThomasObenaus/go-conf"
)
// 定义配置结构体并使用cfg标签进行注解
type MyFontConfig struct {
Color string `cfg:"{'name':'color','desc':'The value of the color as hexadecimal RGB string.','default':'#FFFFFF'}"`
Name string `cfg:"{'name':'name','desc':'Name of the font to be used.'}"`
Size int `cfg:"{'name':'size','desc':'Size of the font.','short':'s'}"`
}
func main() {
// 一些命令行参数
args := []string{
// color未设置 --> 将使用默认值 "--color=#ff00ff",
"--name=Arial",
"-s=12", // 使用-s(简写版本)而不是--size
}
// 1. 创建应该被填充的配置结构体实例
cfg := MyFontConfig{}
// 2. 创建配置提供者实例
provider, err := config.NewConfigProvider(&cfg, "MY_APP", "MY_APP")
if err != nil {
panic(err)
}
// 3. 读取配置并填充结构体
if err := provider.ReadConfig(args); err != nil {
panic(err)
}
// 4. 完成!现在可以使用配置了
fmt.Printf("FontConfig: color=%s, name=%s, size=%d\n", cfg.Color, cfg.Name, cfg.Size)
}
功能特性
- 自动填充结构体,使用通过命令行给定的值
- 从多个来源(如命令行、环境变量和配置文件(yaml))读取配置参数
- 支持默认值
- 支持命令行标志的简写参数
- 在命令行上打印使用说明
- 自定义映射函数以支持将配置参数解析为复杂结构和类型转换
- 支持配置参数列表
- 支持具有多个级别的复杂结构体
许可证
[FOSSA Status]
更多关于golang基于注解结构体的应用配置管理插件库go-conf的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复