Déréférencement des champs de pointeur pour le débogage
Lors de l'impression d'une structure avec des champs de pointeur, ils sont généralement affichés sous forme d'adresses mémoire. Cela peut être gênant pour le débogage, surtout si une structure contient de nombreux champs de pointeur.
Considérez cet exemple :
package main import "fmt" type SomeStruct struct { somePointer *somePointer } type somePointer struct { field string } func main() { fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}}) }
Ce code imprime l'adresse mémoire au lieu de la valeur souhaitée :
{0x10500168}
Pour imprimer la valeur réelle stockée dans le champ du pointeur, nous pouvons utiliser le package go-spew, spécialisé dans l'impression de structures de données complexes dans un format lisible par l'homme.
Voici comment utiliser it :
package main import ( "github.com/davecgh/go-spew/spew" ) type ( SomeStruct struct { Field1 string Field2 int Field3 *somePointer } somePointer struct { field string } ) func main() { s := SomeStruct{ Field1: "Yahoo", Field2: 500, Field3: &somePointer{"I want to see what is in here"}, } spew.Dump(s) }
Ce code produit le résultat suivant :
(main.SomeStruct) { Field1: (string) "Yahoo", Field2: (int) 500, Field3: (*main.somePointer)(0x2102a7230)({ field: (string) "I want to see what is in here" }) }
Comme vous pouvez le voir, go-spew fournit une représentation beaucoup plus détaillée et informative de la structure. Les champs de pointeur sont déréférencés et affichés comme leurs valeurs réelles. Cela rend beaucoup plus facile l'inspection du contenu d'une structure pendant le débogage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!