Maison >développement back-end >Golang >Comment analyser un fichier YAML avec des paires clé-valeur imbriquées dans Go ?

Comment analyser un fichier YAML avec des paires clé-valeur imbriquées dans Go ?

DDD
DDDoriginal
2024-11-10 22:05:02403parcourir

How to Parse a YAML File with Nested Key-Value Pairs in Go?

Analyse d'un fichier YAML dans Go

L'analyse des fichiers YAML dans Go implique l'utilisation de la bibliothèque YAML disponible via gopkg.in/yaml.v2. Le code fourni est conçu pour analyser un fichier YAML avec des paires clé-valeur imbriquées, comme suit :

firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname

Cependant, des problèmes surviennent lorsque vous tentez d'analyser des paires clé-valeur sans valeurs associées. La structure implémentée ne définit pas ces valeurs, ce qui entraîne une erreur lors de l'analyse.

Pour résoudre ce problème, envisagez d'incorporer un exemple YAML réel, tel qu'un service.yaml de Google Cloud ou Kubernetes :

apiVersion: v1
kind: Service
metadata:
  name: myName
  namespace: default
  labels:
    router.deis.io/routable: "true"
  annotations:
    router.deis.io/domains: ""
spec:
  type: NodePort
  selector:
    app: myName
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443

Cet exemple illustre les relations clé-valeur imbriquées et fournit un cas d’utilisation pratique. La structure Go correspondante ressemblerait à :

type Service struct {
    APIVersion string `yaml:"apiVersion"`
    Kind       string `yaml:"kind"`
    Metadata   struct {
        Name      string `yaml:"name"`
        Namespace string `yaml:"namespace"`
        Labels    struct {
            RouterDeisIoRoutable string `yaml:"router.deis.io/routable"`
        } `yaml:"labels"`
        Annotations struct {
            RouterDeisIoDomains string `yaml:"router.deis.io/domains"`
        } `yaml:"annotations"`
    }
    Spec struct {
        Type     string `yaml:"type"`
        Selector struct {
            App string `yaml:"app"`
        }
        Ports []struct {
            Name       string `yaml:"name"`
            Port       int    `yaml:"port"`
            TargetPort int    `yaml:"targetPort"`
            NodePort   int    `yaml:"nodePort,omitempty"`
        } `yaml:"ports"`
    }
}

Pour simplifier le processus, des services comme yaml-to-go et json-to-go fournissent des outils pratiques pour convertir YAML en structures Go, rendant la tâche d'analyse plus gérable. .

Enfin, pour désorganiser le fichier YAML dans votre structure, vous pouvez utiliser le code suivant :

var service Service

err := yaml.Unmarshal(yourFile, &service)
if err != nil {
    panic(err)
}

Cette approche permet d'accéder aux données analysées via la structure de service, vous permettant de interagissez avec les informations du fichier YAML dans votre application Go.

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