配置管理 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。
笔记加载中…