Wie man Structs in Go schön ausgibt
Ethan Miller
Product Engineer · Leapcell

Key Takeaways
- Verwenden Sie
fmt.Printf("%+v", value)
, um schnell die Feldnamen und Werte einer Struktur auszugeben. json.MarshalIndent
bietet eine saubere, lesbare JSON-Ausgabe für Strukturen.- Das
spew
-Paket hilft bei der Inspektion tief verschachtelter oder komplexer Datenstrukturen.
Beim Debuggen oder Protokollieren in Go müssen Sie oft den Inhalt einer Struktur überprüfen. Das Standardausgabeformat ist jedoch möglicherweise nicht sehr lesbar. Hier kommt Pretty Printing ins Spiel. In diesem Artikel werden wir verschiedene Möglichkeiten zum Pretty Printing von Strukturen in Go durchgehen.
Verwenden des fmt
-Pakets
Das Standardpaket fmt
bietet grundlegende Formatierungsoptionen zum Ausgeben von Strukturen.
%+v
Verb
Um die Feldnamen einer Struktur zusammen mit ihren Werten auszugeben, verwenden Sie das Verb %+v
:
package main import ( "fmt" ) type User struct { Name string Email string Age int } func main() { user := User{"Alice", "alice@example.com", 30} fmt.Printf("%+v\n", user) }
Ausgabe:
{Name:Alice Email:alice@example.com Age:30}
Dies ist informativer als %v
, das die Feldnamen weglassen würde.
Verwenden des encoding/json
-Pakets
Für eine lesbarere und formatierte Ausgabe können Sie die Struktur in formatiertes JSON serialisieren.
package main import ( "encoding/json" "fmt" ) type User struct { Name string `json:"name"` Email string `json:"email"` Age int `json:"age"` } func main() { user := User{"Alice", "alice@example.com", 30} data, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("error:", err) return } fmt.Println(string(data)) }
Ausgabe:
{ "name": "Alice", "email": "alice@example.com", "age": 30 }
Dieser Ansatz ist besonders nützlich beim Ausgeben von verschachtelten Strukturen.
Verwenden des spew
-Pakets
Ein weiteres nützliches Tool ist github.com/davecgh/go-spew/spew
, das Go-Datenstrukturen rekursiv in einem lesbaren Format ausgibt.
Installieren Sie es zuerst:
go get -u github.com/davecgh/go-spew/spew
Verwenden Sie es dann wie folgt:
package main import ( "github.com/davecgh/go-spew/spew" ) type User struct { Name string Email string Age int } func main() { user := User{"Alice", "alice@example.com", 30} spew.Dump(user) }
Ausgabe:
(main.User) {
Name: (string) (len=5) "Alice",
Email: (string) (len=17) "alice@example.com",
Age: (int) 30
}
Dies ist äußerst hilfreich bei der Inspektion komplexer oder tief verschachtelter Strukturen.
Schlussfolgerung
Das Pretty Printing von Strukturen in Go kann einfach mit dem Standardpaket fmt
, JSON-Marshalling oder externen Paketen wie spew
erreicht werden. Jeder Ansatz hat seinen eigenen Anwendungsfall:
- Verwenden Sie
fmt.Printf("%+v", value)
für schnelles Inline-Debugging. - Verwenden Sie
json.MarshalIndent
für saubere, menschenlesbare Protokolle. - Verwenden Sie
spew.Dump
für eine detaillierte Inspektion während der Entwicklung.
Wählen Sie die Methode, die Ihren Bedürfnissen am besten entspricht, und gestalten Sie Ihren Debugging-Prozess effizienter!
FAQs
fmt.Println
lässt Feldnamen weg, wodurch die Ausgabe für das Debuggen weniger informativ ist.
Verwenden Sie json.MarshalIndent
, wenn Sie eine mehrzeilige, benutzerfreundliche Ausgabe benötigen oder strukturierte Daten protokollieren.
Nein, aber spew
ist nützlich für komplexe oder tief verschachtelte Daten, die von Standardpaketen weniger übersichtlich verarbeitet werden.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Go-Projekten.
Leapcell ist die nächste Generation der Serverless-Plattform für Webhosting, asynchrone Aufgaben und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Reaktionszeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Auto-Scaling zur einfachen Bewältigung hoher Parallelität.
- Null Betriebsaufwand – konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ