Heim > Backend-Entwicklung > Golang > Wie drucke ich verschachtelte Strukturwerte in Golang ohne Speicheradressen?

Wie drucke ich verschachtelte Strukturwerte in Golang ohne Speicheradressen?

Patricia Arquette
Freigeben: 2024-11-28 06:16:14
Original
153 Leute haben es durchsucht

How to Print Nested Struct Values in Golang Without Memory Addresses?

So drucken Sie verschachtelte Strukturwerte ohne Zeiger in Golang

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)
}
Nach dem Login kopieren

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}
Nach dem Login kopieren

Um den tatsächlichen Wert abzurufen von B können Sie einen dieser Ansätze übernehmen:

Implementieren Sie die Stringer-Schnittstelle

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)
}
Nach dem Login kopieren

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}}
Nach dem Login kopieren

Werte drucken Manuell

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}}
Nach dem Login kopieren

Referenzierung von Strukturwerten

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}}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage