Heim  >  Artikel  >  Backend-Entwicklung  >  Wie analysiere ich YAML-Dateien mit dynamischen Schlüsseln in Go?

Wie analysiere ich YAML-Dateien mit dynamischen Schlüsseln in Go?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 02:38:29422Durchsuche

How to Parse YAML Files with Dynamic Keys in Go?

YAML-Parsing von Go-Code mit dynamischen Schlüsseln

Um Go-Code mit dynamischen Schlüsseln in einer YAML-Datei zu parsen, führen Sie die folgenden Schritte aus:

1. Installieren Sie die Yaml-Bibliothek:

<code class="sh">go get gopkg.in/yaml.v2</code>

2. Definieren Sie die Modellstruktur:
Erstellen Sie eine Struktur zur Darstellung von YAML-Daten. Wenn Sie alle möglichen Schlüssel kennen, können Sie sie mithilfe regulärer Felder definieren. Andernfalls können Sie Map[string]interface{}-Felder verwenden, um dynamische Schlüssel zu enthalten.

3. Verwenden Sie einen benutzerdefinierten Unmarshaler (optional):
Wenn Sie anpassen müssen, wie YAML-Daten analysiert werden, können Sie einen benutzerdefinierten Unmarshaler verwenden. Dies kann Ihnen beim Umgang mit dynamischen Schlüsseln oder anderen komplexen Analyseszenarien helfen.

4. YAML-Daten analysieren:
Verwenden Sie die Funktion yaml.Unmarshal, um die YAML-Daten zu analysieren und in eine Modellstruktur zu deserialisieren.

Beispiel:
Das folgende Beispiel zeigt, wie eine YAML-Datei mit dynamischen Schlüsseln analysiert wird:

<code class="go">package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

var data = `
---
development:
  skip-header-validation: true
  V1:
    current: "1.0.0"
    mime_types:
      - application/vnd.company.jk.identity+json;
      - application/vnd.company.jk.user+json;
      - application/vnd.company.jk.role+json;
      - application/vnd.company.jk.scope+json;
      - application/vnd.company.jk.test+json;
    skip-mime-type-validation: true
    skip-version-validation: true
  V2:
    current: "2.0.0"
    mime_types:
      - application/vnd.company.jk.identity+json;
      - application/vnd.company.jk.user+json;
      - application/vnd.company.jk.role+json;
      - application/vnd.company.jk.scope+json;
      - application/vnd.company.jk.test+json;

`

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 `yaml:",inline"`
}

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

Ausgabe:

map[string]main.Environment{
    "development": {
        SkipHeaderValidation: true,
        Versions: {
            "V1": {
                Current:                "1.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity+json;", "application/vnd.company.jk.user+json;", "application/vnd.company.jk.role+json;", "application/vnd.company.jk.scope+json;", "application/vnd.company.jk.test+json;"},
                SkipVersionValidation:  true,
                SkipMimeTypeValidation: true,
            },
            "V2": {
                Current:                "2.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity+json;", "application/vnd.company.jk.user+json;", "application/vnd.company.jk.role+json;", "application/vnd.company.jk.scope+json;", "application/vnd.company.jk.test+json;"},
                SkipVersionValidation:  false,
                SkipMimeTypeValidation: false,
            },
        },
    },
}

Das obige ist der detaillierte Inhalt vonWie analysiere ich YAML-Dateien mit dynamischen Schlüsseln in Go?. 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