Maison  >  Article  >  développement back-end  >  Comment puis-je accéder efficacement aux données cartographiques imbriquées dans les fichiers de configuration Golang Viper ?

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

DDD
DDDoriginal
2024-11-22 08:40:14958parcourir

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"
    ]
  }
}

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

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"`
}

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

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!

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