【问题标题】:Is it possible to map a prefixed list of env values into a map with Viper?是否可以使用 Viper 将前缀的 env 值列表映射到地图中?
【发布时间】:2021-04-27 02:46:21
【问题描述】:

我有一个当前格式的 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"`
}

我正在寻找但未能找到一种方法,我可以手动将作为 DB_CUSTOMER1=val 的配置键映射到 "CUSTOMER1": "val" 形式的映射(例如:向 Viper 询问带有前缀 DB_ 的所有键,然后设置他们自己)或自动(但似乎 Viper 没有办法以这种方式提取键/值)。

我将不胜感激。

谢谢!

【问题讨论】:

    标签: go viper-go


    【解决方案1】:

    spf13/viper 主要使用 mapstructure 包在一种原生 Go 类型之间转换为另一种,即在 un-marshaling 时。您需要定义一个注释,该注释会导致此地图出现任何未使用的值。可以选择收集此类reminder values。需要修改地图,取接口为

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

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

    【讨论】:

    • 并不能像我需要的那样工作,不幸的是,但它仍然更接近。谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多