Go Viper中使用环境变量重写配置的问题

Go Viper中使用环境变量重写配置的问题,go,viper,viper-go,Go,Viper,Viper Go,我们使用Viper来读取和解析配置文件,所有这些都可以正常工作 但是,我们无法使用env变量覆盖一些配置值。这些是将配置绑定到结构或结构数组的特定用例 下面是config.yaml中的一个示例: app: verifiers: - name: "test1" url: "http://test1.url" cache: "5000ms" - name: "test2" url: "http://test2.url"

我们使用Viper来读取和解析配置文件,所有这些都可以正常工作

但是,我们无法使用env变量覆盖一些配置值。这些是将配置绑定到结构或结构数组的特定用例

下面是config.yaml中的一个示例:

app:
    verifiers:
      - name: "test1"
        url: "http://test1.url"
        cache: "5000ms"
      - name: "test2"
        url: "http://test2.url"
        cache: "10000ms"
它绑定到以下结构(golang):

我们无法使用env变量覆盖验证器的值

以下是我们使用的Viper选项:

viper.AutomaticEnv()
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
有没有人遇到过类似的问题,或者可以确认Viper不支持这样的用例

任何指点都将不胜感激


谢谢

我之前就是这样用的

app:
  debug: ${DEBUG}
然后像这样运行:

DEBUG=true ./hobbyproject

这就是我之前使用它的方式

app:
  debug: ${DEBUG}
然后像这样运行:

DEBUG=true ./hobbyproject

viper无法读取配置文件中的环境变量。您必须在使用值的.go文件中替换它们。以下是我如何实现以下目标的示例:

要求Viver用“Env”前缀来考虑系统环境变量,即ViPER将“Envi-Mango用户”和“EnvimMangGuo口令”作为系统环境变量

viper.AutomaticEnv()
viper.SetEnvPrefix(viper.GetString("ENV"))
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
在yml文件中:

mongodb:
 url: "mongodb+srv://${username}:${password}@xxxxxxx.mongodb.net/"
 database: "test" 
在mongodb连接文件中:(在建立db连接之前,用相应的环境变量替换${username}和${password},但是viper将读取那些没有前缀的变量


viper无法读取配置文件中的环境变量。您必须在使用值的.go文件中替换它们。以下是我如何实现以下目标的示例:

要求Viver用“Env”前缀来考虑系统环境变量,即ViPER将“Envi-Mango用户”和“EnvimMangGuo口令”作为系统环境变量

viper.AutomaticEnv()
viper.SetEnvPrefix(viper.GetString("ENV"))
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
在yml文件中:

mongodb:
 url: "mongodb+srv://${username}:${password}@xxxxxxx.mongodb.net/"
 database: "test" 
在mongodb连接文件中:(在建立db连接之前,用相应的环境变量替换${username}和${password},但是viper将读取那些没有前缀的变量


我试图实现您的解决方案,但在解析uri时遇到了一个
错误:scheme必须是“mongodb”或“mongodb+srv”
。你知道问题出在哪里吗?我试图实现你的解决方案,但我在解析uri时遇到了一个
错误:scheme必须是“mongodb”或“mongodb+srv”
。你知道问题出在哪里吗?