这是我的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
}
我已经设置了 env 变量export PORT=9000
,现在我的问题是如何将环境变量映射PORT
到Configurations.ServerConfig.Port
. 我想为 dev 提供具有默认值的配置文件,并希望我的应用程序从生产环境变量中读取/覆盖配置,我如何使用 viper 来实现这一点。
我看到以下选项
- 设置
SERVER_PORT
然后使用如下替换器将其解组为结构
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
但我想将变量映射PORT
到 struct 成员,可能是因为我的托管服务提供商设置了PORT
env 变量,而我不能使用第二点,因为我想使用 yaml 作为默认值。