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
Linda Hamiltonoriginal
2024-12-04 08:34:12547parcourir

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)

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!

Déclaration:
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