Heim >Backend-Entwicklung >Golang >Wie drucke ich die Werte verschachtelter Strukturen mit Zeigern in Go?
Strukturwerte mit Zeigern in Go drucken
In Go kommt es häufig vor, dass Sie den Wert einer Struktur ausdrucken müssen enthält Zeiger auf andere Strukturen. Das Standardverhalten des %v-Formatbezeichners in fmt.Printf() zeigt jedoch die Zeigeradresse anstelle des tatsächlichen Werts an.
Betrachten Sie das folgende Beispiel:
package main import "fmt" type A struct { a int32 B *B } type B struct { b int32 } func main() { a := &A{ a: 1, B: &B{ b: 2, }, } fmt.Printf("v ==== %+v \n", a) }
Die Ausgabe von Der obige Code lautet:
v ==== &{a:1 B:0xc42000e204}
Wie Sie sehen können, wird das B-Feld als Speicheradresse der B-Struktur gedruckt, nicht als ihre tatsächliche Wert.
Benutzerdefiniertes Drucken mit Stringer-Schnittstelle
Eine Möglichkeit, den Inhalt verschachtelter Strukturen zu drucken, besteht darin, die Stringer-Schnittstelle sowohl für den A- als auch den B-Typ zu implementieren. Die Stringer-Schnittstelle erfordert eine einzelne Methode, String(), die eine String-Darstellung des Werts zurückgibt.
Hier ist ein aktualisiertes Beispiel mit der Stringer-Schnittstelle:
package main import "fmt" type A struct { a int32 B *B } type B struct{ b int32 } func (aa *A) String() string { return fmt.Sprintf("A{a:%d, B:%v}",aa.a,aa.B) } func (bb *B) String() string { return fmt.Sprintf("B{b:%d}",bb.b) } func main() { a := &A{a: 1, B: &B{b: 2}} // using the Stringer interface fmt.Printf("v ==== %v \n", a) // or just print it yourself however you want. fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b) // or just reference the values in the struct that are structs themselves // but this can get really deep fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B) }
Jetzt ist die Ausgabe :
v ==== A{a:1, B:B{b:2}}
Manueller Druck
Wenn Sie das nicht implementieren möchten Mit der Stringer-Schnittstelle können Sie die gewünschte Darstellung der Struktur mithilfe der Druckanweisungen manuell drucken. Sie können beispielsweise auf die Felder der verschachtelten Struktur zugreifen und diese separat ausdrucken:
fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
Dieser Ansatz gibt Ihnen die vollständige Kontrolle über das Format der Ausgabe.
Das obige ist der detaillierte Inhalt vonWie drucke ich die Werte verschachtelter Strukturen mit Zeigern in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!