Maison > développement back-end > Golang > Pourquoi `fmt.Println()` n'appelle-t-il pas ma méthode Stringer ?

Pourquoi `fmt.Println()` n'appelle-t-il pas ma méthode Stringer ?

Linda Hamilton
Libérer: 2024-12-04 08:34:12
original
546 Les gens l'ont consulté

Why Doesn't `fmt.Println()` Call My Stringer Method?

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 :

  • Implémentez String() sur Car au lieu de *Car.
  • Passez toujours un pointeur vers fmt.Println() :
fmt.Println(&myCar)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal