Post

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 文件夹

配置值的读取

值的覆盖顺序

配置值按以下优先级覆盖(从低到高):

  1. Get 指定默认值:通过 GetInt64D 等接口在配置中不存在指定key时返回传递的defaultVal
  2. 结构体默认值:通过 default tag 定义
  3. 通用配置文件common.yaml 中的值
  4. 程序特定配置{executable_name}.yaml 中的值

按结构读取

  • 结构体字段必须是公开的(首字母大写)
  • 支持嵌套结构体
  • 支持的默认值类型:stringintint64boolfloat32float64
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

使用示例

./pkg/config/unit_test.go

最初设想(记录)

下面列表顺序为优先级从低到高,高优先级覆盖低优先级的值

假设可执行文件为 userService

  • 代码设定的默认值
  • ./configs/common.yaml
  • ./configs/userService.yaml

支持定义结构体来解析配置

支持动态获取配置,包括 error/default/must 模式

不支持环境变量,会导致配置入口太多,导致调试和排查时混乱

不支持命令行参数,理由同上。会使用简单命令行参数来控制程序基本行为,比如是否打印日志到控制台,但不是控制业务行为。

This post is licensed under CC BY 4.0 by the author.