配置文件和环境配置
简介
因为go
项目大多运行在容器或者k8s
环境里,这里使用了yaml
文件类型作为配置载体,.env
文件作为环境变量声明,方便部署到k8s
时候映射ConfigMap
到根目录。yaml
支持多维度,支持写注释,作为配置载体最好不过了。
配置目录
config
目录是整个项目的配置集合,目录下所有yaml类型的配置都会被自动加载, 构建时候也会把整个config
目录打包到二进制文件里, 部署只需要关心.env
文件
配置yaml
读取 .env
或者 环境变量
文件app.yaml
内容, 其中的port
会被赋值成8080
servers:
http:
port: env("HTTP_PORT", "80")
.env, 这个文件会整个加载合并到环境变量里
HTTP_PORT=8080
使用
严谨的做法是注入到你的struct, 方便在启动应用时候就读取赋值,如果配置有错误时候,那么启动就会报错了,让错误提前暴露
// @Bean
type test struct {
// 注入配置
name string `inject:"config, app.name"`
}
动态获取
// Config 获取config
func Config(key string) interface{} {
return providers.NewConfigProvider().GetBean(key)
}
// ConfigString 获取config,格式必须是group.key,第二个可选参数为默认值
func ConfigString(key string, args ...string) string {
val := Config(key)
if val == nil {
if len(args) == 0 {
return ""
}
return args[0]
}
return *val.(*string)
}