Heim >Backend-Entwicklung >Golang >Wie drucke ich den Wert und nicht den Zeiger verschachtelter Strukturen in Go?

Wie drucke ich den Wert und nicht den Zeiger verschachtelter Strukturen in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-29 16:44:10322Durchsuche

How to Print the Value, Not the Pointer, of Nested Structs in Go?

Drucken von Strukturwerten mit Zeigern in Go

In Go wird beim Drucken eines Strukturwerts, der Zeiger enthält, normalerweise stattdessen die Zeigeradresse gedruckt des tatsächlichen Wertes. Dies kann problematisch sein, wenn Sie versuchen, den Inhalt einer verschachtelten Struktur zu überprüfen.

So drucken Sie den B-Strukturwert anstelle des Zeigers

Um dieses Problem zu lösen, müssen Sie haben zwei Möglichkeiten:

  1. Implementieren Sie den Stringer Schnittstelle:

    Implementieren Sie die String()-Methode für die A- und B-Strukturen. Diese Methode gibt eine formatierte Zeichenfolgendarstellung der Struktur zurück. Geben Sie in der Implementierung die gewünschten Werte anstelle der Zeiger aus.

    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}}
        fmt.Println(a)
    }
  2. Werte manuell drucken:

    Greifen Sie auf die tatsächlichen Werte der zu B strukturieren Sie manuell und drucken Sie sie direkt aus.

    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("A{a:%d, B:{b:%d}}\n", a.a, a.B.b)
    }

Das obige ist der detaillierte Inhalt vonWie drucke ich den Wert und nicht den Zeiger verschachtelter Strukturen 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