私が取り組んでいるプロジェクトでは、Viper を使用して文字列のマップを環境変数として渡そうとしています。これを達成するためにいくつかのアプローチを試みましたが、成功しませんでした。コードから 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
誰かがここで私を正しい方向に向けてくれることを願っています。