首页 > 解决方案 > 是否可以使用 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 没有办法以这种方式提取键/值)。

我会很感激任何指示。

谢谢!

标签: goviper-go

解决方案


spf13/viper主要使用mapstructure包在一种本机 Go 类型之间转换为另一种,即在取消编组时。您需要定义一个注释,该注释会导致此地图出现任何未使用的值。可以选择收集此类提醒值。您需要修改地图以将接口作为

CustomerDB  map[string]interface{} `mapstructure:",remain"`

这会将您的所有DB_*字段值作为接口类型收集到地图中,您可以键入 assert 以获取所需的字符串值。


推荐阅读