php-Editor Banana stellt Ihnen in diesem Artikel vor, wie Sie Arrays aus Yaml-Dateien in GoLang lesen. GoLang ist eine leistungsstarke Programmiersprache und Yaml-Dateien sind ein Dateiformat, das zum Speichern strukturierter Daten verwendet wird. Durch das Lesen des Arrays in der Yaml-Datei können wir die darin enthaltenen Daten einfach abrufen und eine anschließende Verarbeitung durchführen. In diesem Artikel werden die Schritte zum Lesen einer Yaml-Datei ausführlich erläutert und Beispielcode bereitgestellt, damit Sie es besser verstehen. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel liefert Ihnen praktische Tipps und Wissen, das Sie leicht auf Ihre Projekte anwenden können. Lasst uns gleich loslegen!
Ich versuche, eine Yaml-Datei zu lesen, die ein Array von Objekten enthält
package config import ( "gopkg.in/yaml.v3" "log" "os" "path/filepath" "runtime" ) type documentationinfo struct { docs []document `yaml:"document"` } type document struct { title string `yaml:"title"` filename string `yaml:"filename"` } func (c *documentationinfo) init() map[string]document { _, b, _, _ := runtime.caller(0) basepath := filepath.dir(b) yamlfile, err := os.readfile(basepath + "/documentation.yaml") if err != nil { log.printf("yamlfile.get err #%v ", err) } err = yaml.unmarshal(yamlfile, c.docs) if err != nil { log.fatalf("unmarshal: %v", err) } docinfo := make(map[string]document) for _, doc := range c.docs { docinfo[doc.filename] = doc } return docinfo } func newdocumentconfig() *documentationinfo { return &documentationinfo{} }
yaml-Datei
documentationinfo: document: - {filename: "foo.md", title: "i am an foo title"} - {filename: "test.md", title: "i am an test title"} - {filename: "bar.md", title: "i am an bar title"} - {filename: "nice.md", title: "i am an nice title"}
Fehler
2023/06/27 13:44:44 Unmarshal: yaml: unmarshal errors: line 1: cannot unmarshal !!map into []config.Document
Ich bin mir nicht sicher, ob das Problem an der Syntax der Yaml-Datei liegt, da sie JSON ähnelt, aber die Querverweisdokumentation sieht korrekt aus.
Für Vorschläge wäre ich sehr dankbar ...
Sie haben den äußersten Container mit einem Array von document
键的映射,其中包含 document
s:
type documentationinfo struct { docs []document `yaml:"document"` }
Aber das ist nicht die Struktur der Eingabedaten, sie sieht so aus:
documentationinfo: document: - {filename: "foo.md", title: "i am an foo title"} - {filename: "test.md", title: "i am an test title"} - {filename: "bar.md", title: "i am an bar title"} - {filename: "nice.md", title: "i am an nice title"}
Das äußere Element ist ein Include documentationinfo
键的映射(该键的值是带有 document
键的映射)。您需要像这样重新定义您的类型(我已将其转换为 package main
, damit ich es zum Testen lokal ausführen kann):
package main import ( "fmt" "log" "os" "path/filepath" "runtime" "gopkg.in/yaml.v3" ) type documentationinfofile struct { documentationinfo documentationinfo `yaml:"documentationinfo"` } type documentationinfo struct { docs []document `yaml:"document"` } type document struct { title string `yaml:"title"` filename string `yaml:"filename"` } func (docinfo *documentationinfofile) init() map[string]document { _, b, _, _ := runtime.caller(0) basepath := filepath.dir(b) yamlfile, err := os.readfile(basepath + "/documentation.yaml") if err != nil { log.printf("yamlfile.get err #%v ", err) } err = yaml.unmarshal(yamlfile, docinfo) if err != nil { log.fatalf("unmarshal: %v", err) } docmap := make(map[string]document) for _, doc := range docinfo.documentationinfo.docs { docmap[doc.filename] = doc } return docmap } func newdocumentconfig() *documentationinfofile { return &documentationinfofile{} } func main() { d := newdocumentconfig() docmap := d.init() fmt.printf("%+v\n", docmap) }
Das Ausführen des obigen Codes führt zu Folgendem:
65bcd85880 GebührDas obige ist der detaillierte Inhalt vonArray aus Yaml-Datei in GoLang lesen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!