„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie analysiere ich eine YAML-Datei mit verschachtelten Schlüssel-Wert-Paaren in Go?

Wie analysiere ich eine YAML-Datei mit verschachtelten Schlüssel-Wert-Paaren in Go?

Veröffentlicht am 16.11.2024
Durchsuche:509

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

Parsen einer YAML-Datei in Go

Das Parsen von YAML-Dateien in Go erfordert die Verwendung der YAML-Bibliothek, die über gopkg.in/yaml.v2 verfügbar ist. Der bereitgestellte Code dient zum Parsen einer YAML-Datei mit verschachtelten Schlüssel-Wert-Paaren wie dem folgenden:

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

Allerdings treten Probleme auf, wenn versucht wird, Schlüssel-Wert-Paare ohne begleitende Werte zu analysieren. Die implementierte Struktur definiert diese Werte nicht, was zu einem Fehler beim Parsen führt.

Um dieses Problem zu beheben, sollten Sie erwägen, ein reales YAML-Beispiel einzubinden, beispielsweise eine service.yaml von Google Cloud oder 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

Dieses Beispiel demonstriert verschachtelte Schlüssel-Wert-Beziehungen und bietet einen praktischen Anwendungsfall. Die entsprechende Go-Struktur würde wie folgt aussehen:

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

Um den Prozess zu vereinfachen, bieten Dienste wie yaml-to-go und json-to-go praktische Tools zum Konvertieren von YAML in Go-Strukturen, wodurch die Parsing-Aufgabe einfacher zu verwalten ist.

Abschließend: Um die YAML-Datei in Ihrer Struktur zu entmarshalieren, können Sie den folgenden Code verwenden:

var service Service

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

Dieser Ansatz ermöglicht den Zugriff auf die analysierten Daten über die Servicestruktur und ermöglicht Ihnen die Interaktion mit den Informationen der YAML-Datei in Ihrer Go-Anwendung.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3