gpt4 book ai didi

go - Viper 将环境变量映射到结构成员

转载 作者:行者123 更新时间:2023-12-03 10:10:38 26 4
gpt4 key购买 nike

这是我的config.yaml文件

server:
port: 5000
这是我使用毒蛇解码的逻辑
type Configurations struct {
Server ServerConfig
}

type ServerConfig struct {
Port int
}

// LoadConfig reads configuration from file or environment variables.
func LoadConfig(path string) (config Configurations, err error) {
viper.AddConfigPath(path)
viper.SetConfigName("config")
viper.SetConfigType("yaml")

viper.AutomaticEnv()

err = viper.ReadInConfig()
if err != nil {
return
}

err = viper.Unmarshal(&config)
return
}
我设置了环境变量 export PORT=9000 ,现在我的问题是如何映射环境变量 PORTConfigurations.ServerConfig.Port .
我想为 dev 提供具有默认值的配置文件,并希望我的应用程序从生产环境变量中读取/覆盖配置,我如何使用 viper 来实现这一点。
我看到以下选项
  • 设置 SERVER_PORT然后使用下面的替换器将其解码为 struct
  • replacer := strings.NewReplacer(".", "_")
    viper.SetEnvKeyReplacer(replacer)
  • Go viper .yaml values environment variables override

  • 但我想映射变量 PORT到 struct 成员,可能是因为我的托管服务提供商设置了 PORT env 变量,我不能使用第二点,因为我想使用 yaml 作为默认值。

    最佳答案

    您可以使用 viper.BindEnv(string...) error将特定的环境变量绑定(bind)到配置。
    来自 Working with Environment Variables :

    BindEnv takes one or more parameters. The first parameter is the key name, the rest are the name of the environment variables to bind to this key. If more than one are provided, they will take precedence in the specified order.


    这里端口的配置键是 server.port , 和环境变量 PORT应该绑定(bind)到它。
    ...
    viper.AutomaticEnv()


    err = viper.BindEnv("server.port", "PORT")
    if err != nil {
    return
    }


    err = viper.ReadInConfig()
    ...
    有了这个改变,像 PORT=9999 ./yourbinary 这样的电话拿起 PORT并将其写入 server.port .从那里,它将被解码到您的结构中。

    关于go - Viper 将环境变量映射到结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65746929/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com