Maison >développement back-end >Golang >Comment imprimer les valeurs des structures imbriquées avec des pointeurs dans Go ?
Impression de valeurs de structure avec des pointeurs dans Go
Dans Go, il est courant de rencontrer des situations où vous devez imprimer la valeur d'une structure qui contient des pointeurs vers d’autres structures. Cependant, le comportement par défaut du spécificateur de format %v dans fmt.Printf() affiche l'adresse du pointeur au lieu de la valeur réelle.
Considérez l'exemple suivant :
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) }
La sortie de le code ci-dessus est :
v ==== &{a:1 B:0xc42000e204}
Comme vous pouvez le voir, le champ B est imprimé comme l'adresse mémoire de la structure B, et non comme son adresse réelle value.
Impression personnalisée avec l'interface Stringer
Une façon d'imprimer le contenu des structures imbriquées consiste à implémenter l'interface Stringer pour les types A et B. L'interface Stringer nécessite une seule méthode, String(), qui renvoie une représentation sous forme de chaîne de la valeur.
Voici un exemple mis à jour avec l'interface Stringer :
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) }
Maintenant, la sortie est :
v ==== A{a:1, B:B{b:2}}
Impression manuelle
Si vous ne souhaitez pas mettre en œuvre le Interface Stringer, vous pouvez imprimer manuellement la représentation souhaitée de la structure à l'aide des instructions d'impression. Par exemple, vous pouvez accéder aux champs de la structure imbriquée et les imprimer séparément :
fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
Cette approche vous donne un contrôle complet sur le format de la sortie.
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!