Heim >Backend-Entwicklung >Golang >Wie drucke ich die Werte verschachtelter Strukturen mit Zeigern in Go?

Wie drucke ich die Werte verschachtelter Strukturen mit Zeigern in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-29 21:24:11196Durchsuche

How to Print the Values of Nested Structs with Pointers 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!

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