Dereferenzieren von Zeigerfeldern zum Debuggen
Beim Drucken einer Struktur mit Zeigerfeldern werden diese normalerweise als Speicheradressen angezeigt. Dies kann beim Debuggen unpraktisch sein, insbesondere wenn eine Struktur zahlreiche Zeigerfelder enthält.
Betrachten Sie dieses Beispiel:
package main import "fmt" type SomeStruct struct { somePointer *somePointer } type somePointer struct { field string } func main() { fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}}) }
Dieser Code gibt die Speicheradresse anstelle des gewünschten Werts aus:
{0x10500168}
Um den im Zeigerfeld gespeicherten tatsächlichen Wert auszudrucken, können wir das Paket go-spew verwenden, das auf das Drucken komplexer Datenstrukturen in a spezialisiert ist Für Menschen lesbares Format.
So verwenden Sie es:
package main import ( "github.com/davecgh/go-spew/spew" ) type ( SomeStruct struct { Field1 string Field2 int Field3 *somePointer } somePointer struct { field string } ) func main() { s := SomeStruct{ Field1: "Yahoo", Field2: 500, Field3: &somePointer{"I want to see what is in here"}, } spew.Dump(s) }
Dieser Code erzeugt die folgende Ausgabe:
(main.SomeStruct) { Field1: (string) "Yahoo", Field2: (int) 500, Field3: (*main.somePointer)(0x2102a7230)({ field: (string) "I want to see what is in here" }) }
Wie Sie sehen können, go-spew Bietet eine viel detailliertere und informativere Darstellung der Struktur. Die Zeigerfelder werden dereferenziert und als ihre tatsächlichen Werte angezeigt. Dies macht es viel einfacher, den Inhalt einer Struktur während des Debuggens zu überprüfen.
Das obige ist der detaillierte Inhalt vonWie dereferenziere ich Zeigerfelder für ein effektives Debugging in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!