Wie analysiere ich dynamische Schlüssel in YAML mit Go?

DDD
Freigeben: 2024-11-04 03:26:30
Original
415 Leute haben es durchsucht

How to Parse Dynamic Keys in YAML with Go?

Dynamisches Schlüsselparsen in YAML mit Go

Beim Arbeiten mit YAML-Dateien in Go kann es vorkommen, dass die Schlüsselnamen innerhalb der Datei variieren. Dies wird häufig für API-Versionierungs- oder dynamische Konfigurationszwecke verwendet. Um solche YAML-Strukturen effektiv zu analysieren, müssen Sie benutzerdefinierte Parsing-Strategien anwenden.

Problemzusammenfassung

Im Kontext der API-Versionierung ist es möglich, eine YAML-Datei mit Schlüsseln zu haben, die verschiedene Versionen darstellen , wie „V1“, „V2“, „V3“ usw. Der Haken daran ist, dass diese Versionen möglicherweise nicht immer in der Datei vorhanden sind und ihre Reihenfolge möglicherweise inkonsistent ist.

Benutzerdefinierter Unmarshaler-Ansatz

Um dieses Problem zu beheben, sollten Sie die Implementierung eines benutzerdefinierten Unmarshalers für die entsprechenden Versionen in Betracht ziehen Datenstruktur. Dadurch können Sie den Unmarshalling-Prozess steuern und dynamische Schlüsselwerte verarbeiten.

<code class="go">package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

type MajorVersion struct {
    Current                string   `yaml:"current"`
    MimeTypes              []string `yaml:"mime_types"`
    SkipVersionValidation  bool     `yaml:"skip-version-validation"`
    SkipMimeTypeValidation bool     `yaml:"skip-mime-type-validation"`
}

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(&amp;params); err != nil {
        return err
    }
    var versions map[string]MajorVersion
    if err := unmarshal(&amp;versions); err != nil {
        // Here we expect an error because a boolean cannot be converted to a MajorVersion
        if _, ok := err.(*yaml.TypeError); !ok {
            return err
        }
    }
    e.SkipHeaderValidation = params.SkipHeaderValidation
    e.Versions = versions
    return nil
}

func main() {
    var e map[string]Environment
    if err := yaml.Unmarshal([]byte(data), &amp;e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}</code>
Nach dem Login kopieren

Durch die Definition eines benutzerdefinierten Unmarshalers für die Umgebungsstruktur können Sie sowohl boolesche als auch verschachtelte Strukturen in Ihrer YAML-Datei effektiv verarbeiten.

Fazit

Benutzerdefinierte Unmarshaler bieten eine leistungsstarke Möglichkeit, komplexe und dynamische YAML-Strukturen in Golang zu analysieren. Durch die Implementierung einer benutzerdefinierten Unmarshaling-Logik können Sie Ihre Datenstrukturen an unterschiedliche Schlüsselformate anpassen und so die Arbeit mit YAML-Dateien in Situationen erleichtern, in denen sich die Struktur im Laufe der Zeit ändern könnte.

Das obige ist der detaillierte Inhalt vonWie analysiere ich dynamische Schlüssel in YAML mit Go?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!