ホームページ  >  記事  >  バックエンド開発  >  Go の Viper ライブラリを使用して YAML 構成ファイルからマップのスライスを効率的に読み取るにはどうすればよいですか?

Go の Viper ライブラリを使用して YAML 構成ファイルからマップのスライスを効率的に読み取るにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-22 11:11:12451ブラウズ

How Can I Efficiently Read a Slice of Maps from a YAML Configuration File Using Go's Viper Library?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。