对于我正在处理的项目,我正在尝试使用 Viper 将 stings 映射作为环境变量传递。我尝试了几种方法来实现这一点,但没有成功。当我从代码中读取 env 变量时,它是空的。这是我正在使用的代码:
// To configure viper
viper.SetEnvPrefix("CONFIG")
viper.AutomaticEnv()
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
// To read the configuration value I tried all this variants:
fmt.Print(viper.GetString("options.values"))
fmt.Print(viper.GetStringMapString("options.values"))
fmt.Print(viper.GetStringMap("options.values"))
这就是我传递价值的方式:
CONFIG_OPTIONS_VALUES_ROOT="。"
我也试过:
CONFIG_OPTIONS_VALUES="{\"root\": \".\",\"cmd\": \"exec\", \"logging\": \"on\"}"
我想要处理传递到 env 变量中的值的方式是:
values := viper.GetStringMapString("options.values")
for key, val := range values {
fmt.Printf("Key: %s, Value: %s", key, val)
}
如果我将此配置写入配置文件并使用 viper 读取它,我可以完美地做到这一点:
options:
values:
root: .
cmd: exec
logging: on
#more values can be added here
希望有人可以在这里为我指明正确的方向。