Heim >Backend-Entwicklung >Golang >Wie drucke ich Zeigerfelder für das Debuggen in Go hübsch aus?

Wie drucke ich Zeigerfelder für das Debuggen in Go hübsch aus?

DDD
DDDOriginal
2024-11-07 18:00:05563Durchsuche

How to Pretty-Print Pointer Fields for Debugging in Go?

Wie drucke ich Zeigerfelder für das Debuggen in Go hübsch aus?

Beim Debuggen eines Go-Programms kann es nützlich sein, den Inhalt auszudrucken von Strukturen, einschließlich aller Zeigerfelder. Standardmäßig druckt Go jedoch Zeigerfelder als Speicheradressen, was möglicherweise nicht hilfreich ist.

Bedenken Sie den folgenden Code:

type SomeStruct struct {
    somePointer *somePointer
}
type somePointer struct {
    field string
}

func main() {
    fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}})
}

Dieser Code gibt eine Speicheradresse anstelle der gewünschten Zeichenfolge aus Wert. Um den dereferenzierten Wert zu drucken, können Sie das Paket go-spew verwenden.

import (
  "github.com/davecgh/go-spew/spew"
)

func main() {
  s := SomeStruct{
    Field1: "Yahoo",
    Field2: 500,
    Field3: &somePointer{"I want to see what is in here"},
  }
  spew.Dump(s)
}

Dieser Code verwendet die Funktion spew.Dump, um den Inhalt von SomeStruct zu drucken, einschließlich der dereferenzierten Werte seiner Zeigerfelder. Die Ausgabe wird sein:

(main.SomeStruct) {
 Field1: (string) "Yahoo",
 Field2: (int) 500,
 Field3: (*main.somePointer)(0x2102a7230)({
  field: (string) "I want to see what is in here"
 })
}

Diese Ausgabe enthält den gewünschten Zeichenfolgenwert für das Feld field der somePointer-Struktur. Das go-spew-Paket bietet eine praktische Möglichkeit, strukturierte Daten in einem lesbaren Format zu drucken und erleichtert so das Debuggen komplexer Strukturen mit verschachtelten Zeigerfeldern.

Das obige ist der detaillierte Inhalt vonWie drucke ich Zeigerfelder für das Debuggen in Go hübsch aus?. 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