Maison > développement back-end > Golang > le corps du texte

Comment puis-je accéder efficacement aux données cartographiques imbriquées dans les fichiers de configuration Golang Viper ?

DDD
Libérer: 2024-11-22 08:40:14
original
963 Les gens l'ont consulté

How Can I Efficiently Access Nested Map Data in Golang Viper Configuration Files?

Lecture d'une tranche de cartes avec Golang Viper

Dans Golang, la bibliothèque Viper simplifie le travail avec des fichiers de configuration provenant de différents formats de fichiers. Cependant, lors de l'accès aux données cartographiques imbriquées, les développeurs rencontrent parfois des difficultés.

Le problème

Considérez le fichier de configuration HCL suivant :

interval = 10
statsd_prefix = "pinger"

group "dns" {
  target_prefix = "ping"
  target "dns" {
    hosts = [
      "dnsserver1",
      "dnsserver2"
    ]
  }
}
Copier après la connexion

Le un problème survient lors de l'accès à la section "groupe" en tant que carte à l'aide de viper.GetStringMap("group"). La structure résultante est une tranche de cartes, comme indiqué ci-dessous :

[]map[string]interface {} (len=1 cap=1) {
  map[string]interface {} (len=1) {
    dns: []map[string]interface {} (len=1 cap=2) { ... }
  }
}
Copier après la connexion

La solution

Au lieu d'essayer de gérer manuellement une telle structure, la fonction Unmarshal de Viper fournit une solution plus élégante. En définissant une structure de configuration personnalisée, vous pouvez demander à Viper de décoder le fichier de configuration directement en objet.

Par exemple, la structure de configuration suivante correspond au fichier 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"`
}
Copier après la connexion

Avec Cette structure en place, vous pouvez désorganiser le fichier de configuration comme suit :

var config config

err := viper.Unmarshal(&config)
if err != nil {
    t.Fatalf("unable to decode into struct, %v", err)
}
Copier après la connexion

Cette approche automatise le mappage et l'analyse des données, offrant ainsi une solution plus simple et plus moyen efficace d'accéder aux données cartographiques imbriquées dans vos applications Golang.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal