configx
模块 configx
负责读取配置,供其他模块使用。 configx
使用 github.com/spf13/viper 管理配置,confix
将它设置为读取配置后再自动读取环境变量,这样环境变量将会覆盖已有配置项的值。 使用配置则是直接使用viper包,减少心智负担。
读取配置
在快速开始示例中,我们使用embed来将配置文件作为字符串嵌入到程序中(示例项目/conf),这时相关代码如下:
go
app.Use(
configx.NewModule(configx.WithContent(conf.Config)),
)
configx.WithContent 方法接收一个字符串,这样在编译后,我们就得到了一个已经包含默认配置的程序。在部署时,我们只需要修改环境变量即可修改程序配置。
您也可以像以前一样,为每个程序附带一个配置文件,那么代码是下面这样:
go
app.Use(
configx.NewModule(configx.WithPath("/path/to/config.yaml")),
)
configx.WithPath 方法接收一个路径。同样的,环境变量也能覆盖已有的配置项。
使用配置
使用配置代码如下:
通过依赖注入使用
go
container.Invoke(func(c *viper.Viper) {
c.GetString("xxx")
})
或者直接使用
go
viper.GetString("xxx")
使用环境变量表示层级关系
因环境变量名中无法使用 .
号,所以我们使用 __
(两个下划线) 来替换 .
。 例如,在配置文件中我们有这样的配置:
yaml
database:
dsn: "xxxxxxxxxx"
那么环境变量我们需要写成这样:
bash
DATABASE__DSN=xxxxxxxxxxx
模式
configx 中自带了四种模式:
- local:本地开发模式
- develop: 线上开发环境模式
- staging:线上预发布环境模式
- release:线上正式环境模式
在处理某些任务的时候,框架会需要知道当前的模式。
slog
框架默认使用 slog 包作为日志输出工具, 在 configx 初始化时会顺便配置 slog 包。 若当前为 local 模式,configx 包会将 slog 的最低打印 level 设置为 debug。