Strukturen in Go ausgeben: Vom Anfänger zum Profi in 10 Minuten

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

Warum ist "einfach eine Struktur ausgeben" in Go nicht so einfach?

\n\n

Stellen Sie sich vor: Sie programmieren in Go, haben eine schöne Struktur User erstellt, mit Daten gefüllt und möchten einfach einen Blick darauf werfen, was drin ist. Sie schreiben fmt.Println(user) und sehen so etwas wie {Alex 25 true}. Informativ? Nicht wirklich. Und wenn es 15 Felder gibt? Und wenn eines davon eine verschachtelte Struktur ist? Und wenn es ein Slice von Strukturen ist?

\n\n

Die Frage "How to print struct variables in console?" auf Stack Overflow hat nicht umsonst tausende Aufrufe. Jeder Anfänger (und nicht nur) in Golang stößt darauf, dass die Standardausgabe von Strukturen eine langweilige Zeichenkette ohne Feldnamen ist. Und wenn das Projekt wächst, wird das Debuggen zum Ratespiel.

\n\n

In diesem Artikel behandeln wir alle Möglichkeiten, Strukturen in der Go-Konsole auszugeben: von den Grundlagen bis zu fortgeschrittenen Techniken. Sie erfahren, wie Sie eine Struktur schön, mit Feldnamen, als JSON und sogar mit einer eigenen Methode zum Drucken ausgeben. Los geht's!

\n\n

▎1. Der einfachste Weg: fmt.Println und seine Einschränkungen

\n\n

Beginnen wir mit den Grundlagen. Wir haben eine Struktur:

\n\n
package main\n\nimport "fmt"\n\ntype User struct {\n    Name   string\n    Age    int\n    Active bool\n}\n\nfunc main() {\n    u := User{Name: "Anna", Age: 30, Active: true}\n    fmt.Println(u)\n}\n
\n\n

Ausgabe:\n

{Anna 30 true}

\n\n

Es funktioniert, ist aber nicht informativ. Sie sehen nicht, welcher Wert zu welchem Feld gehört. Wenn die Struktur 10 Felder hat, müssen Sie raten, was was ist. Besonders, wenn sich der Datentyp wiederholt (z. B. zwei string-Felder hintereinander).

\n\n

Fazit: fmt.Println eignet sich nur für eine schnelle Überprüfung, wenn die Struktur klein ist und Sie sich genau an die Reihenfolge der Felder erinnern.

\n\n

Wann ist das nützlich?

\n
    \n
  • Sie schreiben ein Einweg-Skript.
  • \n
  • Die Struktur enthält 2-3 Felder unterschiedlicher Typen.
  • \n
  • Sie verwenden fmt.Println für Logs, bei denen Geschwindigkeit wichtiger ist als Lesbarkeit.
  • \n
\n\n

▎2. Das rettende %+v: Ausgabe mit Feldnamen

\n\n

Dies ist wohl die beliebteste Antwort auf Stack Overflow. Das Format %+v in fmt.Printf gibt die Struktur mit Feldnamen aus:

\n\n
fmt.Printf("%+v\\n", u)\n
\n\n

Ausgabe:\n

{Name:Anna Age:30 Active:true}

\n\n

Schon viel besser! Sie sehen klar, wo Name, Alter und Status sind.

\n\n

Was gibt es sonst noch im Arsenal von fmt?

\n
    \n
  • %v — Standarddarstellung (wie bei Println).
  • \n
  • %+v — mit Feldnamen.
  • \n
  • %#v — vollständige Darstellung mit Paket- und Typangabe (siehe unten).
  • \n
  • %T — gibt nur den Typ der Variable aus.
  • \n
\n\n

Beispiel mit %#v:

\n
fmt.Printf("%#v\\n", u)\n// main.User{Name:"Anna", Age:30, Active:true}\n
\n\n

Dieses Format ist nützlich, wenn Sie die Ausgabe kopieren und wieder in den Code einfügen möchten – es ist eine gültige literale Initialisierung der Struktur.

\n\n

Tipp: Merken Sie sich die Kombination %+v – das ist Ihr täglich Brot beim Debuggen von Strukturen in Go.

\n\n

▎3. Schönheit und Ordnung: Serialisierung in JSON

\n\n

Wenn die Struktur groß, verschachtelt ist oder Slices enthält, kann %+v unlesbar werden. Hier kommt JSON zur Hilfe. Go kann standardmäßig eine Struktur in JSON umwandeln:

\n\n
package main\n\nimport (\n    "encoding/json"\n    "fmt"\n)\n\ntype Address struct {\n    City  string `json:"city"`\n    Street string `json:"street"`\n}\n\ntype User struct {\n    Name    string  `json:"name"`\n    Age     int     `json:"age"`\n    Active  bool    `json:"active"`\n    Address Address `json:"address"`\n}\n\nfunc main() {\n    u := User{\n        Name:   "Ivan",\n        Age:    28,\n        Active: true,\n        Address: Address{\n            City:   "Moskau",\n            Street: "Twerskaja",\n        }                

Blogs

Buchempfehlungen