配置管理 g.Cfg:读取优先级与多环境
结论:配置统一走 g.Cfg()(单例,默认文件配置 Adapter):gf 工程默认加载 manifest/config/config.yaml;多环境通过环境变量 GF_GCFG_FILE 或 SetFileName 切换文件;读取用“点分 key”,返回 *gvar.Var。
一、核心要点
- 支持格式:yaml(默认)、toml、json、xml、ini、properties(以官方文档为准)。
- 查找位置:文件 Adapter 会按官方默认路径顺序查找配置文件(典型如工作目录、config/、manifest/config/,以官方文档为准)。
- 多环境:最常见做法是 config.yaml / config.prod.yaml 分文件,通过环境变量 GF_GCFG_FILE=config.prod.yaml 或代码内 SetFileName 切换。
- 读取 API:Get/MustGet 返回 gvar;GetMap/GetData 可取整块;key 支持点分路径如 server.address。
二、配置示例
# manifest/config/config.yaml
server:
address: ":8000"
openapiPath: "/api.json"
database:
default:
link: "mysql:root:123456@tcp(127.0.0.1:3306)/demo"
logger:
path: "./log"
level: "all"
代码示例
addr := g.Cfg().MustGet(ctx, "server.address").String()
link := g.Cfg().MustGet(ctx, "database.default.link").String()
g.Log().Info(ctx, "addr", addr)
多环境启动:
GF_GCFG_FILE=config.prod.yaml ./app
常见追问 / 记忆点
- 追问:运行期修改配置文件会生效吗?→ 与具体 Adapter 实现相关,是否支持热更新以官方文档/源码为准。
- 追问:代码中何时读取配置最合适?→ 集中在 init/启动阶段读取并校验,业务内避免散落魔法字符串。
- 记忆点:g.Cfg() 单例 + 点分 key + gvar 取值;多环境 = 多文件 + GF_GCFG_FILE。