YAML-Parsing von Go-Code mit dynamischen Schlüsseln
Um Go-Code in einer YAML-Datei zu parsen, die dynamische Schlüssel enthält, befolgen Sie diese Schritte:
1. Installieren Sie Yaml Bibliothek:
go get gopkg.in/yaml.v2
2. Definieren Sie die Modellstruktur:
Erstellen Sie eine Struktur zur Darstellung 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:
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)
}
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, }, }, }, }
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