Maison >développement back-end >Golang >Comment imprimer des valeurs de structure imbriquées dans Golang sans adresses mémoire ?
Lorsque vous travaillez avec des structures imbriquées, il peut être difficile d'imprimer leurs valeurs sans afficher leurs adresses mémoire. Regardons cet exemple :
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) }
Lors de l'exécution de ce code, vous verrez que la sortie contient l'adresse mémoire de la structure imbriquée B :
v ==== &{a:1 B:0xc42000e204}
Pour récupérer la valeur réelle de B, vous pouvez adopter l'une de ces approches :
Implémenter l'interface Stringer L'interface pour la structure imbriquée vous permet de définir comment sa représentation sous forme de chaîne sera formatée lors de l'impression. Voici comment procéder :
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) }
Avec cette implémentation, vous pouvez désormais utiliser le spécificateur de format %v pour imprimer une représentation sous forme de chaîne personnalisée de la structure :
fmt.Printf("v ==== %v \n", a) // Output: v ==== A{a:1, B:B{b:2}}
Vous pouvez également imprimer manuellement les valeurs sans recourir à l'interface Stringer. Cette approche vous donne plus de contrôle sur le format de sortie :
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}}
Si vous souhaitez éviter d'imprimer la référence de structure, vous pouvez référencer explicitement ses valeurs :
fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B) // Output: v ==== A{a:1, B:&{b:2}}
Cependant, cette approche peut devenir complexe lorsqu'il s'agit de structures profondément imbriquées.
En résumé, vous pouvez imprimer valeurs de structure imbriquées sans pointeurs en implémentant l'interface Stringer, en imprimant les valeurs manuellement ou en référençant directement les valeurs de structure. Choisissez l'approche qui correspond le mieux à vos besoins spécifiques.
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!