So drucken Sie Strukturwerte mit Zeiger in Golang
Bedenken Sie den folgenden Codeausschnitt:
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) // output: v ==== &{a:1 B:0xc42000e204} }
Hier: Sie möchten den Wert von B ohne seine Zeigerdarstellung ausgeben. Um dies zu erreichen, gibt es einige Möglichkeiten:
1. Implementierung der Stringer-Schnittstelle:
Die Funktion fmt.Printf() ruft die Methode String() auf, wenn sie für den zu druckenden Typ vorhanden ist. Implementieren Sie die String()-Methode sowohl für A- als auch für B-Strukturen:
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) }
Mit dieser Implementierung lautet die Ausgabe:
v ==== A{a:1, B:B{b:2}}
2. Anpassen des Druckformats:
Sie können die Ausgabezeichenfolge direkt so formatieren, dass sie nur die gewünschten Felder enthält:
fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
Ausgabe:
v ==== A{a:1, B:B{b:2}}
3. Referenzieren von Werten in der Struktur:
Da B ein Feld innerhalb von A ist, können Sie direkt auf dessen Wert verweisen:
fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
Ausgabe:
v ==== A{a:1, B:&{b:2}}
Das obige ist der detaillierte Inhalt vonWie drucke ich den verschachtelten Zeigerwert einer Struktur in Golang ohne die Zeigeradresse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!