ホームページ > バックエンド開発 > Golang > Golang Viper を使用して設定ファイルからマップのスライスを読み取る方法?

Golang Viper を使用して設定ファイルからマップのスライスを読み取る方法?

DDD
リリース: 2024-11-26 04:46:22
オリジナル
649 人が閲覧しました

How to Read Slices of Maps from Configuration Files Using Golang Viper?

Golang Viper を使用したマップのスライスの読み取り

Viper ライブラリは、Go で構成データを読み取り、管理するための優れたツールです。ユーザーが直面する一般的な課題の 1 つは、構成ファイルからマップのスライスを読み取ることです。

次の HCL 構成ファイルについて考えてみましょう。

interval = 10
statsd_prefix = "pinger"

group "dns" {
  target_prefix = "ping"
  target "dns" {
    hosts = [
      "dnsserver1",
      "dnsserver2"
    ]
  }
}
ログイン後にコピー

Viper でこの構成ファイルを読み取るには、次のコード:

type config struct {
    Interval      int     `mapstructure:"interval"`
    StatsdPrefix  string  `mapstructure:"statsd_prefix"`
    Groups       []group `mapstructure:"group"`
}

type group struct {
    Name         string  `mapstructure:"group"`
    TargetPrefix string  `mapstructure:"target_prefix"`
    Targets      []target `mapstructure:"target"`
}

type target struct {
    Name   string   `mapstructure:"target"`
    Hosts  []string `mapstructure:"hosts"`
}

func main() {
    viper.SetConfigName("config")
    viper.AddConfigPath(".")

    err := viper.ReadInConfig()
    if err != nil {
        panic(err)
    }

    var c config
    err = viper.Unmarshal(&c)
    if err != nil {
        panic(err)
    }

    fmt.Println(c.Interval)
    fmt.Println(c.StatsdPrefix)

    fmt.Println("Groups:")
    for _, group := range c.Groups {
        fmt.Println("- Name:", group.Name)
        fmt.Println("  - Prefix:", group.TargetPrefix)

        fmt.Println("  - Targets:")
        for _, target := range group.Targets {
            fmt.Println("    - Name:", target.Name)
            fmt.Println("      - Hosts:")
            for _, host := range target.Hosts {
                fmt.Println("        - ", host)
            }
        }
    }
}
ログイン後にコピー

構成ファイルに一致するように Go 構造を定義することで、Viper は構成データを自動的にデコードし、正しい構成データにマッピングできます。 種類。これにより、複雑なデータ構造の操作が簡素化され、構成値にアクセスするタイプセーフな方法が提供されます。

以上がGolang Viper を使用して設定ファイルからマップのスライスを読み取る方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート