Golang Viper を使用したマップのスライスの読み取り
Golang では、Viper ライブラリにより、さまざまなファイル形式の設定ファイルの操作が簡素化されます。ただし、ネストされたマップ データにアクセスする場合、開発者は課題に遭遇することがあります。
問題
次の HCL 構成ファイルについて考えてみましょう。
interval = 10 statsd_prefix = "pinger" group "dns" { target_prefix = "ping" target "dns" { hosts = [ "dnsserver1", "dnsserver2" ] } }
この問題は、viper.GetStringMap("group") を使用してマップとして "group" セクションにアクセスするときに発生します。結果として得られる構造は、以下に示すようにマップのスライスです。
[]map[string]interface {} (len=1 cap=1) { map[string]interface {} (len=1) { dns: []map[string]interface {} (len=1 cap=2) { ... } } }
解決策
このような構造を手動で処理しようとする代わりに、Viper の Unmarshal 関数は以下を提供します。よりエレガントなソリューション。カスタム構成構造を定義することで、構成ファイルをオブジェクトに直接デコードするように Viper に指示できます。
たとえば、次の構成構造は HCL ファイルに対応します。
type config struct { interval int `mapstructure:"interval"` statsdPrefix string `mapstructure:"statsd_prefix"` groups []group } type group struct { groupName string `mapstructure:"group"` targetPrefix string `mapstructure:"target_prefix"` targets []target } type target struct { targetName string `mapstructure:"target"` hosts []string `mapstructure:"hosts"` }
この構造を適切に配置すると、次のように構成ファイルをアンマーシャリングできます。
var config config err := viper.Unmarshal(&config) if err != nil { t.Fatalf("unable to decode into struct, %v", err) }
このアプローチでは、データ マッピングと解析し、Golang アプリケーションでネストされた地図データにアクセスするためのより簡単かつ効率的な方法を提供します。
以上がGolang Viper 設定ファイル内のネストされたマップ データに効率的にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。