go - 是否可以使用 Viper 将前缀的 env 值列表映射到地图中?
问题描述
我有一个当前格式的 dotenv 文件
KEY_PATH=/keys
LOG_LEVEL=WARNING
DB_CUSTOMER1=dbone
DB_CUSTOMER2=dbtwo
我也有一个结构形式为
type MyConfiguration struct {
KeyPath string `mapstructure:"KEY_PATH"`
CustomerDB map[string]string `<???>`
LogLevel string `mapstructure:"LOG_LEVEL"`
}
我正在寻找并且未能找到一种方法,我可以手动(例如:向 Viper 询问带有前缀 DB_DB_CUSTOMER1=val
的"CUSTOMER1": "val"
所有键,然后自己设置它们)或自动(但似乎Viper 没有办法以这种方式提取键/值)。
我会很感激任何指示。
谢谢!
解决方案
spf13/viper主要使用mapstructure包在一种本机 Go 类型之间转换为另一种,即在取消编组时。您需要定义一个注释,该注释会导致此地图出现任何未使用的值。可以选择收集此类提醒值。您需要修改地图以将接口作为
CustomerDB map[string]interface{} `mapstructure:",remain"`
这会将您的所有DB_*
字段值作为接口类型收集到地图中,您可以键入 assert 以获取所需的字符串值。
推荐阅读
- kubernetes - 错误:Kubernetes 中版本“keda.k8s.io/v1alpha1”中的“ScaledObject”类型没有匹配项
- sql - 将多个sql结果合并到一张表中?
- javascript - 使用新的 Google 身份服务 SDK 如何获取刷新令牌
- arduino - 使用 Accel 移动 Redrex 步进电机
- appium - 我无法在我的 macbook M1 上运行 uiautomatorviewer
- python - 在卷积神经网络中,如何在 Keras 函数模型中使用 Maxout?
- javascript - Javascript React无法读取null的属性
- azure - 使用图形 api 创建在线会议时出错
- node.js - 在 Jenkins 中:如何运行 NPM install 、 npm run 和 Npm run 代理
- php - 从数组中获取特定值