Heim > Backend-Entwicklung > Golang > Wie kann ich YAML mit dynamischen Schlüsseln in Golang analysieren?

Wie kann ich YAML mit dynamischen Schlüsseln in Golang analysieren?

Patricia Arquette
Freigeben: 2024-11-04 10:57:02
Original
575 Leute haben es durchsucht

How Can I Parse YAML with Dynamic Keys in Golang?

YAML mit dynamischen Schlüsseln in Golang analysieren

Bei der Arbeit mit YAML-Dateien, die dynamisch definierte Schlüssel enthalten, kann das Typsystem von Go Herausforderungen darstellen. In diesem Artikel wird untersucht, wie man solche YAML effektiv analysiert und dabei die gewünschte Typstruktur beibehält.

Wir sind auf ein Beispiel gestoßen, bei dem die YAML-Datei variable Schlüssel enthielt (z. B. „V1“, „V2“ usw.). Der anfängliche Ansatz, dies als Umgebungstyp zu analysieren, scheiterte und führte dazu, dass wir nach einer benutzerdefinierten Lösung suchten.

Die Lösung liegt in der Implementierung einer benutzerdefinierten UnmarshalYAML-Methode für unseren Umgebungstyp. Mit dieser Methode können wir den Unmarshaling-Prozess abfangen und die dynamischen Schlüssel verarbeiten. Der aktualisierte Code:

<code class="go">type Environment struct {
    SkipHeaderValidation bool
    Versions             map[string]MajorVersion
}

func (e *Environment) UnmarshalYAML(unmarshal func(interface{}) error) error {
    var params struct {
        SkipHeaderValidation bool `yaml:"skip-header-validation"`
    }
    if err := unmarshal(&params); err != nil {
        return err
    }
    var versions map[string]MajorVersion
    if err := unmarshal(&versions); err != nil {
        // Here we expect an error because a boolean cannot be converted to a
        // a MajorVersion
        if _, ok := err.(*yaml.TypeError); !ok {
            return err
        }
    }
    e.SkipHeaderValidation = params.SkipHeaderValidation
    e.Versions = versions
    return nil
}</code>
Nach dem Login kopieren

Durch die Definition einer Map[string]MajorVersion für die Versions-Eigenschaft ermöglichen wir die dynamische Schlüsselanalyse. Die benutzerdefinierte UnmarshalYAML-Methode füllt diese Karte dynamisch basierend auf dem YAML-Inhalt.

Wenn wir nun die YAML entmarshalieren, erhalten wir eine Map[string]Environment als Stammtyp, wobei jede Umgebung über eine gefüllte Versions-Map verfügt. Dies adressiert die Herausforderung des Parsens und Darstellens dynamisch definierter Schlüssel in YAML.

Das obige ist der detaillierte Inhalt vonWie kann ich YAML mit dynamischen Schlüsseln in Golang analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage