Comment imprimer la valeur de structure avec un pointeur dans Golang
Considérez l'extrait de code 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) // output: v ==== &{a:1 B:0xc42000e204} }
Ici, vous souhaitez imprimer la valeur de B sans sa représentation de pointeur. Pour y parvenir, il existe quelques options :
1. Implémentation de l'interface Stringer :
La fonction fmt.Printf() appelle la méthode String() si elle existe pour le type en cours d'impression. Implémentez la méthode String() pour les structures A et B :
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, le résultat sera :
v ==== A{a:1, B:B{b:2}}
2. Personnalisation du format d'impression :
Vous pouvez directement formater la chaîne de sortie pour inclure uniquement les champs souhaités :
fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
Sortie :
v ==== A{a:1, B:B{b:2}}
3. Référencement des valeurs dans la structure :
Puisque B est un champ dans A, vous pouvez directement référencer sa valeur :
fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
Sortie :
v ==== A{a:1, B:&{b:2}}
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!