Arbeiten mit YAML in Go
Grace Collins
Solutions Engineer · Leapcell

Key Takeaways
- Go bietet mehrere Bibliotheken, wie
go-yaml/yaml
undgoccy/go-yaml
, zum Parsen und Generieren von YAML. - YAML kann in Go-Strukturen unmarshalled und wieder in das YAML-Format gemarshalled werden.
- Die Wahl der richtigen YAML-Bibliothek hängt von der Feature-Unterstützung und den Leistungsanforderungen ab.
YAML (YAML Ain't Markup Language) ist ein menschenlesbarer Daten-Serialisierungsstandard, der häufig für Konfigurationsdateien und den Datenaustausch zwischen Sprachen mit unterschiedlichen Datenstrukturen verwendet wird. In der Go-Programmiersprache stehen mehrere Bibliotheken zum Parsen und Generieren von YAML-Inhalten zur Verfügung. Dieser Artikel untersucht die wichtigsten Bibliotheken und demonstriert, wie man mit YAML in Go arbeitet.
YAML-Bibliotheken in Go
go-yaml/yaml
Das Paket go-yaml/yaml
ist eine der am weitesten verbreiteten Bibliotheken für die Verarbeitung von YAML in Go. Es wurde als reiner Go-Port der C-Bibliothek libyaml entwickelt und ermöglicht es Go-Programmen, YAML-Werte komfortabel zu kodieren und zu dekodieren. Das Paket unterstützt den grössten Teil von YAML 1.2 und bewahrt aus Gründen der Abwärtskompatibilität einiges Verhalten von YAML 1.1. [Quelle: https://github.com/go-yaml/yaml]
Um das Paket zu installieren, führen Sie Folgendes aus:
go get gopkg.in/yaml.v3
goccy/go-yaml
Eine Alternative zu go-yaml/yaml
ist die Bibliothek goccy/go-yaml
. Diese Bibliothek wurde von Grund auf neu entwickelt, um go-yaml/yaml
zu ersetzen, und behebt einige der Einschränkungen des Vorgängers, wie z. B. Wartungsprobleme und Parsing-Funktionen. Sie bietet Funktionen wie besseres Parsing, Unterstützung für YAML-Anker und -Aliase sowie anpassbares Marshal-/Unmarshal-Verhalten. [Quelle: https://github.com/goccy/go-yaml]
Um dieses Paket zu installieren, führen Sie Folgendes aus:
go get github.com/goccy/go-yaml
Parsen von YAML in Go
Um eine YAML-Datei in Go zu parsen, können Sie eine Struktur definieren, die die Struktur Ihres YAML-Inhalts widerspiegelt, und die Funktion Unmarshal
verwenden, um die YAML-Daten in die Struktur zu dekodieren.
Hier ist ein Beispiel:
package main import ( "fmt" "log" "gopkg.in/yaml.v3" ) var data = ` a: Easy! b: c: 2 d: [3, 4] ` type T struct { A string B struct { RenamedC int `yaml:"c"` D []int `yaml:",flow"` } } func main() { t := T{} err := yaml.Unmarshal([]byte(data), &t) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- t:\n%v\n\n", t) }
In diesem Beispiel wird der YAML-Inhalt in die Struktur T
unmarshalled, und die Werte werden entsprechend ausgegeben. [Quelle: https://pkg.go.dev/gopkg.in/yaml.v3]
Generieren von YAML in Go
Um YAML aus Go-Datenstrukturen zu generieren, können Sie die Funktion Marshal
verwenden, die von den YAML-Bibliotheken bereitgestellt wird. Hier ist, wie Sie es machen können:
package main import ( "fmt" "log" "gopkg.in/yaml.v3" ) type T struct { A string B struct { RenamedC int `yaml:"c"` D []int `yaml:",flow"` } } func main() { t := T{ A: "Easy!", B: struct { RenamedC int `yaml:"c"` D []int `yaml:",flow"` }{ RenamedC: 2, D: []int{3, 4}, }, } d, err := yaml.Marshal(&t) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- t dump:\n%s\n\n", string(d)) }
Dieser Code definiert eine Struktur T
, füllt sie mit Daten und marshalled sie in das YAML-Format. Der resultierende YAML-Inhalt wird dann ausgegeben. [Quelle: https://pkg.go.dev/gopkg.in/yaml.v3]
Schlussfolgerung
Die Arbeit mit YAML in Go ist dank robuster Bibliotheken wie go-yaml/yaml
und goccy/go-yaml
unkompliziert. Abhängig von den Anforderungen Ihres Projekts können Sie die Bibliothek auswählen, die Ihren Anforderungen am besten entspricht. Indem Sie verstehen, wie man YAML parst und generiert, können Sie Konfigurationsdateien effektiv verwalten und den Datenaustausch in Ihren Go-Anwendungen erleichtern.
FAQs
go-yaml/yaml
ist weit verbreitet, aber goccy/go-yaml
bietet alternative Funktionen und Leistungsverbesserungen.
Verwenden Sie die Funktion Unmarshal
aus einer YAML-Bibliothek, um YAML in Go-Strukturfelder zu dekodieren.
Ja, mit der Funktion Marshal
können Go-Strukturen in YAML serialisiert werden.
Wir sind Leapcell, Ihre Top-Wahl für das Hosten von Go-Projekten.
Leapcell ist die Next-Gen Serverless Plattform für Webhosting, asynchrone Aufgaben und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Setzen Sie unbegrenzt Projekte kostenlos ein
- Zahlen Sie nur für die Nutzung — keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Mio. Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeit-Metriken und Protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Auto-Scaling zur einfachen Bewältigung hoher Parallelität.
- Kein operativer Aufwand — konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ