Objekt-Serialisierung in Go (Golang): JSON, XML, Gob und Protocol Buffers

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Objekt-Serialisierung in Go (Golang): von JSON bis Protobuf

\n\n

Serialisierung ist der Prozess der Umwandlung einer Datenstruktur (Objekt, Slice, Map) in eine Byte-Sequenz zum Speichern in einer Datei, zur Übertragung über ein Netzwerk oder zum Caching. Der umgekehrte Prozess ist die Deserialisierung. In Go (Golang) wird diese Aufgabe mit integrierten Paketen und Drittanbieter-Bibliotheken gelöst. Die Wahl des Werkzeugs hängt von den Anforderungen an Geschwindigkeit, Datengröße, Lesbarkeit und Kompatibilität mit anderen Sprachen ab.

\n\n

1. Integriertes Paket encoding/json

\n\n

Die beliebteste Methode zur Serialisierung in Go. JSON ist ein menschenlesbares, plattformübergreifendes Format. Das Paket encoding/json bietet die Funktionen Marshal und Unmarshal.

\n\n
package main\n\nimport (\n    "encoding/json"\n    "fmt"\n    "log"\n)\n\ntype User struct {\n    ID    int    `json:"id"`\n    Name  string `json:"name"`\n    Email string `json:"email,omitempty"`\n}\n\nfunc main() {\n    user := User{ID: 1, Name: "Alice", Email: "alice@example.com"}\n\n    // Serialisierung\n    jsonData, err := json.Marshal(user)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Println(string(jsonData)) // {"id":1,"name":"Alice","email":"alice@example.com"}\n\n    // Deserialisierung\n    var decoded User\n    err = json.Unmarshal(jsonData, &decoded)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf("%+v\\n", decoded)\n}
\n\n

Besonderheiten:

\n
    \n
  • Unterstützung von Struktur-Tags zur Anpassung der Feldnamen.
  • \n
  • Funktioniert mit Slices, Maps, verschachtelten Strukturen.
  • \n
  • Langsamer als binäre Formate, aber praktisch zum Debuggen.
  • \n
  • Unterstützt keine zyklischen Referenzen.
  • \n
\n\n

2. encoding/xml — XML-Serialisierung

\n\n

XML wird in SOAP, RSS, Konfigurationsdateien verwendet. Das Paket encoding/xml funktioniert ähnlich wie JSON, jedoch mit xml-Tags.

\n\n
type Book struct {\n    Title  string `xml:"title"`\n    Author string `xml:"author"`\n    Pages  int    `xml:"pages,attr"`\n}\n\nfunc main() {\n    book := Book{Title: "Go in Action", Author: "William Kennedy", Pages: 500}\n    xmlData, _ := xml.MarshalIndent(book, "", "  ")\n    fmt.Println(string(xmlData))\n    // <Book pages="500">\n    //   <title>Go in Action</title>\n    //   <author>William Kennedy</author>\n    // </Book>\n}
\n\n

Wann verwenden:

\n
    \n
  • Integration mit Legacy-Systemen.
  • \n
  • Strenge Schemata (XSD).
  • \n
  • Dokumentorientierte Daten.
  • \n
\n\n

3. encoding/gob — natives binäres Go-Format

\n\n

Das Paket encoding/gob wurde speziell für Go entwickelt. Es kodiert Daten effizient in ein binäres Format und unterstützt komplexe Typen (Interfaces, Channels, Funktionen – mit Einschränkungen).

\n\n
import "encoding/gob"\n\ntype Task struct {\n    ID     int\n    Status string\n}\n\nfunc main() {\n    var network bytes.Buffer\n    enc := gob.NewEncoder(&network)\n    dec := gob.NewDecoder(&network)\n\n    task := Task{ID: 42, Status: "done"}\n    err := enc.Encode(task)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    var restored Task\n    err = dec.Decode(&restored)\n    fmt.Println(restored) // {42 done}\n}
\n\n

Vorteile:

\n
    \n
  • Hohe Geschwindigkeit und Kompaktheit.
  • \n
  • Automatische Typregistrierung.
  • \n
  • Unterstützung zyklischer Strukturen.
  • \n
\n\n

Nachteil: Inkompatibilität mit anderen Sprachen.

\n\n

4. Protocol Buffers (protobuf) — schnelle binäre Serialisierung

\n\n

Entwickelt von Google. Erfordert die Definition eines Schemas in einer .proto-Datei und die Codegenerierung über protoc. Die Bibliothek google.golang.org/protobuf ist der moderne Standard.

\n\n
// user.proto\n// syntax = "proto3";\n// message User {\n//   int32 id = 1;\n//   string name =                    

Empfehlungen