Heim >Backend-Entwicklung >Golang >Wie drucke ich den verschachtelten Zeigerwert einer Struktur in Golang ohne die Zeigeradresse?

Wie drucke ich den verschachtelten Zeigerwert einer Struktur in Golang ohne die Zeigeradresse?

DDD
DDDOriginal
2024-12-07 17:04:11363Durchsuche

How to Print a Struct's Nested Pointer Value in Golang Without the Pointer Address?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn