Maison >développement back-end >Golang >Pourquoi `fmt.Println()` n'appelle-t-il pas ma méthode Stringer ?
Pourquoi ma méthode d'interface Stringer n'est pas invoquée lors de l'utilisation de fmt.Println()
Vous avez une méthode String() définie sur * Car, mais lorsque vous utilisez fmt.Println(myCar), votre objet est une valeur et non un pointeur. Ce comportement est dû au fait que fmt.Println() convertit implicitement l'objet myCar en une valeur de type interface{}, puis utilise un commutateur de type pour déterminer comment l'imprimer.
Le commutateur de type dans le package fmt vérifie pour un cas de type fmt.Stringer. Cependant, cette vérification échoue car Car (et non *Car) implémente la méthode String(). L'appel manuel de String() fonctionne car le compilateur convertit automatiquement myCar.String() en (&myCar).String(), fournissant le pointeur nécessaire.
Pour résoudre ce problème, vous avez deux options :
fmt.Println(&myCar)
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!