Maison >développement back-end >Golang >Comment lire des tranches de cartes à partir de fichiers de configuration à l'aide de Golang Viper ?

Comment lire des tranches de cartes à partir de fichiers de configuration à l'aide de Golang Viper ?

DDD
DDDoriginal
2024-11-26 04:46:22654parcourir

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

Lecture de tranches de cartes avec Golang Viper

La bibliothèque Viper est un excellent outil pour lire et gérer les données de configuration dans Go. Un défi courant auquel les utilisateurs sont confrontés est de lire une tranche de cartes à partir d'un fichier de configuration.

Considérez le fichier de configuration HCL suivant :

interval = 10
statsd_prefix = "pinger"

group "dns" {
  target_prefix = "ping"
  target "dns" {
    hosts = [
      "dnsserver1",
      "dnsserver2"
    ]
  }
}

Pour lire ce fichier de configuration avec Viper, vous pouvez utiliser le code suivant :

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)
            }
        }
    }
}

En définissant les structures Go pour qu'elles correspondent au fichier de configuration, Viper peut automatiquement décoder et mapper les données de configuration aux types corrects. Cela simplifie le travail avec des structures de données complexes et fournit un moyen sécurisé d'accéder aux valeurs de configuration.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn