PGO-Config
PGO-Config
配置相关封装
基于 Kratos 框架的配置管理封装
配置加载方式
1
2
func InitConfig(confPath string) (err error)
func MustInitConfig(confFolder string)
- 指定一个文件时,读取该文件作为配置文件
- 指定一个文件夹,读取该文件夹下的 execName.yaml 和 common.yaml 作为配置文件
- 如果两个配置文件都存在,execName.yaml 的值将覆盖 common.yaml 的值
- 未指定时默认使用可执行文件所在目录下的
configs文件夹
配置值的读取
值的覆盖顺序
配置值按以下优先级覆盖(从低到高):
- Get 指定默认值:通过
GetInt64D等接口在配置中不存在指定key时返回传递的defaultVal - 结构体默认值:通过
defaulttag 定义 - 通用配置文件:
common.yaml中的值 - 程序特定配置:
{executable_name}.yaml中的值
按结构读取
- 结构体字段必须是公开的(首字母大写)
- 支持嵌套结构体
- 支持的默认值类型:
string、int、int64、bool、float32、float64
1
func Scan(v any) (err error)
按 Key 读取
提供三种读取模式:
1
2
3
4
5
6
// 默认值模式
func GetStringD(key string, defaultVal string) string
// 错误模式
func GetStringE(key string) (string, error)
// 断言模式
func GetStringM(key string) string
使用示例
最初设想(记录)
下面列表顺序为优先级从低到高,高优先级覆盖低优先级的值
假设可执行文件为 userService
- 代码设定的默认值
- ./configs/common.yaml
- ./configs/userService.yaml
支持定义结构体来解析配置
支持动态获取配置,包括 error/default/must 模式
不支持环境变量,会导致配置入口太多,导致调试和排查时混乱
不支持命令行参数,理由同上。会使用简单命令行参数来控制程序基本行为,比如是否打印日志到控制台,但不是控制业务行为。
This post is licensed under CC BY 4.0 by the author.