Golang Viper を使用してマップのスライスを読み取るためのヒント
この記事では、次を使用してマップのスライスを読み取るための洞察を提供します。 Go で人気のある Viper ライブラリ。
前述したように、構成ファイルの管理に Viper を使用しています。共有されているものと同様の YAML 構成。目標は、それぞれの設定を持つ複数のグループを含めることができる「グループ」オプションを読み取ることです。
注意事項を理解する
次を使用して「グループ」オプションを読み取る場合viper.GetStringMap()、問題が発生しました。これは、「グループ」オプションが単一のマップではなくマップのスライスであるためです。 Viper はこれを自動的に推論できず、エラーを返します。
解決策: カスタム アンマーシャリング
マップのスライスを読み取るには、マップを表すカスタム構成構造体を作成することをお勧めします。必要なデータ構造。あなたの場合、提供されたソリューションに示すように、構成、グループ、およびターゲットの構造体を定義できます。
これらの構造体を定義したら、viper.Unmarshal() を使用して構成をアンマーシャルできます。カスタム構造体。これにより、マップのスライスが自動的に処理され、それに応じて構造体が設定されます。
コード例:
type config struct { interval int `mapstructure:"interval"` statsdPrefix string `mapstructure:"statsd_prefix"` groups []group `mapstructure:"group"` } type group struct { group string `mapstructure:"group"` targetPrefix string `mapstructure:"target_prefix"` targets []target `mapstructure:"target"` } type target struct { target string `mapstructure:"target"` hosts []string `mapstructure:"hosts"` } var C config err := viper.Unmarshal(&C) if err != nil { panic(fmt.Errorf("unable to decode into struct, %v", err)) }
このアプローチに従うと、マップのスライスを簡単に読み取ることができます。 Viper を使用してマップします。
以上がGo の Viper ライブラリを使用して YAML 構成ファイルからマップのスライスを効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。