Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man komplexe YAML-Dateien in Go effektiv analysieren?

Wie kann man komplexe YAML-Dateien in Go effektiv analysieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-14 11:53:02539Durchsuche

How to Effectively Parse Complex YAML Files in Go?

YAML-Dateien effektiv in Go analysieren

Zu verstehen, wie YAML-Dateien in Go genau analysiert werden, ist für verschiedene Anwendungen von entscheidender Bedeutung. Durch die Verwendung wohldefinierter Go-Strukturen kann man effizient mit YAML-Daten interagieren.

Problemstellung

In Ihrer Anfrage haben Sie beschrieben, dass die folgende YAML-Datei nicht analysiert werden konnte mit Go:

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

Darüber hinaus haben Sie versucht, den folgenden Go-Code zu verwenden:

type Config struct {
    Firewall_network_rules map[string][]string
}

...

err = yaml.Unmarshal(yamlFile, &config)

Dieser Ansatz führte jedoch zu einem Fehler, möglicherweise aufgrund des Fehlens entsprechender Strukturen für die Schlüssel-Wert-Paare src und dst.

Lösung

Wenn die YAML-Datei aus Listen besteht, reicht der folgende Ansatz aus:

---
firewall_network_rules:
  rule1:
    - value1
    - value2
...

Für komplexere YAML-Strukturen wie das von Ihnen bereitgestellte Beispiel service.yaml gilt jedoch Folgendes:

apiVersion: v1
kind: Service
...

Sie müssen benutzerdefinierte Go-Strukturen definieren, die mit der verschachtelten Struktur der YAML übereinstimmen. Beispiel:

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"`
    } `yaml:"metadata"`
    Spec struct {
        Type     string `yaml:"type"`
        Selector struct {
            App string `yaml:"app"`
        } `yaml:"selector"`
        Ports []struct {
            Name       string `yaml:"name"`
            Port       int    `yaml:"port"`
            TargetPort int    `yaml:"targetPort"`
            NodePort   int    `yaml:"nodePort,omitempty"`
        } `yaml:"ports"`
    } `yaml:"spec"`
}

Sobald die Go-Strukturen definiert sind, können Sie die Funktion yaml.Unmarshal() verwenden, um die YAML-Daten in diese Strukturen zu analysieren. Zum Beispiel:

var service Service

err = yaml.Unmarshal(yourFile, &service)

Durch Befolgen dieser Techniken können Sie YAML-Dateien effektiv analysieren und die Daten in Ihren Go-Anwendungen nutzen. Denken Sie daran, Ihre Go-Strukturen an die spezifische Struktur Ihrer YAML-Dateien anzupassen.

Das obige ist der detaillierte Inhalt vonWie kann man komplexe YAML-Dateien in Go effektiv analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn