Wie kann ich (in der Konsole) der Druck Id
, Title
, Name
usw. diese Struktur in Golang?
type Project struct {
Id int64 `json:"project_id"`
Title string `json:"title"`
Name string `json:"name"`
Data Data `json:"data"`
Commits Commits `json:"commits"`
}
fmt.Println
.Antworten:
So drucken Sie den Namen der Felder in einer Struktur:
Aus dem
fmt
Paket :Angenommen, Sie haben eine Instanz von Project (in '
yourProject
').Der Artikel JSON und Go enthält weitere Informationen zum Abrufen der Werte aus einer JSON-Struktur.
Diese Beispielseite bietet eine andere Technik:
Das würde drucken:
Wenn Sie keine Instanz haben, müssen Sie Reflection verwenden , um den Namen des Felds einer bestimmten Struktur anzuzeigen, wie in diesem Beispiel .
quelle
Ich möchte go-spew empfehlen , das laut Github "einen sehr hübschen Drucker für Go-Datenstrukturen implementiert , um das Debuggen zu erleichtern".
Anwendungsbeispiel:
Ausgabe:
quelle
Meine 2 Cent wären zu verwenden
json.MarshalIndent
- überrascht, dass dies nicht empfohlen wird, da es am einfachsten ist. zum Beispiel:Keine externen Deps und führt zu einer gut formatierten Ausgabe.
quelle
"\t"
mit ," "
wenn Sie Platz Einrücken wollen stattMarshal()
nur die exportierten Felder einer Struktur serialisiert werden - es ist jedoch perfekt für Karten.Ich denke, es wäre besser, einen benutzerdefinierten Stringer zu implementieren, wenn Sie eine formatierte Ausgabe von a wünschen
struct
zum Beispiel
quelle
quelle
fmt.Printf(%#v, p)
, wirft michmain.struct
mitstruct type
was ist der Unterschied zwischen"%#v"
und"%+v"
@cokebolAlternativ können Sie diese Funktion verwenden
PrettyPrint()
Um dies zu verwenden, benötigen Sie keine zusätzlichen Pakete mit Ausnahme von
fmt
undencoding/json
lediglich einer Referenz, einem Zeiger oder einem Literal der von Ihnen erstellten Struktur.Um es zu verwenden, nehmen Sie einfach Ihre Struktur, initialisieren Sie sie in main oder einem anderen Paket, in dem Sie sich befinden, und übergeben Sie sie
PrettyPrint()
.Die Ausgabe wäre
Spielen Sie mit dem Code um hier .
quelle
Ich mag Müll .
Aus ihrer Readme:
Sdump
ist ziemlich praktisch in Tests:quelle
Ich empfehle die Verwendung der Pretty Printer Library . Dadurch können Sie jede Struktur sehr einfach drucken.
Bibliothek installieren
https://github.com/kr/pretty
oder
Tun Sie dies jetzt in Ihrem Code
Durch diese Bibliothek und mehr können Sie auch Unterschiede zwischen Komponenten feststellen. Sie können auch einen Blick auf Bibliothek Docs hier.
quelle
pretty.Formatter
Wenn Sie komplexere Strukturen haben, müssen Sie möglicherweise vor dem Drucken in JSON konvertieren:
Quelle: https://gist.github.com/tetsuok/4942960
quelle
Besuchen Sie hier , um den vollständigen Code zu sehen. Hier finden Sie auch einen Link für ein Online-Terminal, über das der vollständige Code ausgeführt werden kann und das Programm darstellt, wie die Informationen der Struktur extrahiert werden (Feldname, Typ und Wert). Unten finden Sie das Programm-Snippet, das nur die Feldnamen druckt.
quelle
Es gibt auch Go-Rendering , das die Zeigerrekursion und viele Schlüsselsortierungen für String- und Int-Maps übernimmt.
Installation:
Beispiel:
Welche Drucke:
quelle
Dies ist die grundlegende Methode zum Drucken der Details
quelle
Eine andere Möglichkeit besteht darin, eine Funktion mit dem Namen
toString
struct zu erstellen und die Felder nach Ihren Wünschen zu formatieren.quelle
Stringer
Schnittstelle implementieren . Es würdefunc (t T) String() string { return fmt.Sprintf("SomeT{TID: %d, TField: %d, SomeTField: %s, SomeAnotherField: %s}", t.ID, t.Field, t.SomeTField, t.SomeAnotherField) }
Ohne Verwendung externer Bibliotheken und mit neuer Zeile nach jedem Feld:
quelle
quelle
sehr einfach Ich habe nicht die Struktur von Daten und Commits Also habe ich die geändert
Informationen zum Lernen erhalten Sie hier: https://gobyexample.com/structs
quelle
Möglicherweise sollte dies nicht für Produktionsanforderungen angewendet werden, aber wenn Sie sich im Debugging-Modus befinden, empfehlen wir Ihnen, den folgenden Ansatz zu befolgen.
Dies führt zu einer Formatierung der Daten im JSON-Format mit verbesserter Lesbarkeit.
quelle
Die meisten dieser Pakete verlassen sich auf das Reflect-Paket, um solche Dinge zu ermöglichen.
fmt.Sprintf () verwendet -> func (p * pp) printArg (arg interface {}, Verbrune) der Standardbibliothek
Gehen Sie zu Zeile 638 -> https://golang.org/src/fmt/print.go
Betrachtung:
https://golang.org/pkg/reflect/
Beispielcode:
https://github.com/donutloop/toolkit/blob/master/debugutil/prettysprint.go
quelle
Ein besserer Weg, dies zu tun, wäre, eine globale Konstante für die Zeichenfolge "% + v" in einem Paket namens "commons" (möglicherweise) zu erstellen und sie überall in Ihrem Code zu verwenden
quelle
Println
Funktion kein Format-String-Argument akzeptiert. Sie sagen, eine globale Konstante ist besser, haben aber nicht gerechtfertigt, warum sie besser ist als die markierte Antwort. Sie haben eine nicht standardmäßige Beschriftung für eine bekannte Formatzeichenfolge erstellt. Das Etikett ist viel länger, schwerer zu merken und niemand anderes, der an Ihrem Code arbeitet, würde es verwenden. Es verwendet sowohl ALL_CAPS als auch einen Unterstrich, über den sich jeder Golang-Linter beschweren wird. Die Konvention lautetmixedCaps
golang.org/doc/effective_go.html#mixed-caps. Am besten entfernen Sie diese Antwort.