Bei der Arbeit mit verschachtelten Strukturen kann es schwierig sein, ihre Werte zu drucken, ohne ihre Speicheradressen anzuzeigen. Schauen wir uns dieses Beispiel an:
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) }
Wenn Sie diesen Code ausführen, werden Sie sehen, dass die Ausgabe die Speicheradresse der verschachtelten Struktur B enthält:
v ==== &{a:1 B:0xc42000e204}
Um den tatsächlichen Wert abzurufen von B können Sie einen dieser Ansätze übernehmen:
Implementieren Sie den Stringer Mit der Schnittstelle für die verschachtelte Struktur können Sie definieren, wie ihre Zeichenfolgendarstellung beim Drucken formatiert wird. So können Sie es tun:
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) }
Mit dieser Implementierung können Sie jetzt den Formatbezeichner %v verwenden, um eine benutzerdefinierte Zeichenfolgendarstellung der Struktur zu drucken:
fmt.Printf("v ==== %v \n", a) // Output: v ==== A{a:1, B:B{b:2}}
Alternativ können Sie die Werte manuell drucken, ohne auf die Stringer-Schnittstelle angewiesen zu sein. Dieser Ansatz gibt Ihnen mehr Kontrolle über das Ausgabeformat:
fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b) // Output: v ==== A{a:1, B:B{b:2}}
Wenn Sie das Drucken der Strukturreferenz vermeiden möchten, können Sie explizit auf deren Werte verweisen:
fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B) // Output: v ==== A{a:1, B:&{b:2}}
Dieser Ansatz kann jedoch komplex werden, wenn es um tief verschachtelte Strukturen geht.
Zusammenfassend lässt sich sagen, dass Sie verschachtelt drucken können Strukturwerte ohne Zeiger durch Implementierung der Stringer-Schnittstelle, manuelles Drucken von Werten oder direktes Referenzieren von Strukturwerten. Wählen Sie den Ansatz, der Ihren spezifischen Anforderungen am besten entspricht.
Das obige ist der detaillierte Inhalt vonWie drucke ich verschachtelte Strukturwerte in Golang ohne Speicheradressen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!