Maison >développement back-end >Golang >Pourquoi `fmt.Println()` préfère-t-il `Error()` à `String()` pour les types personnalisés ?

Pourquoi `fmt.Println()` préfère-t-il `Error()` à `String()` pour les types personnalisés ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 04:20:13530parcourir

Why Does `fmt.Println()` Prefer `Error()` Over `String()` for Custom Types?

Pourquoi la méthode Error() remplace la méthode String() dans fmt.Println()

Lorsque vous implémentez à la fois String() et Error () pour un type personnalisé, vous pouvez rencontrer une situation dans laquelle fmt.Println() donne la priorité à la méthode Error() par rapport à la méthode String().

Cela est dû au fait que le package fmt utilise une hiérarchie lors du choix de la méthode à appeler pour formater un objet. Selon la documentation du package, l'ordre des opérations suivant est appliqué :

  1. Si l'objet implémente l'interface Formatter, sa méthode Format() sera invoquée.
  2. Si le %# v est utilisé et que l'objet implémente l'interface GoStringer, sa méthode GoString() sera appelée.
  3. Si l'objet implémente l'interface d'erreur, sa méthode Error() sera utilisée pour convertir l'objet en chaîne.
  4. Si l'objet implémente la méthode String(), sa méthode String() sera appelée.

Puisque l'interface d'erreur est classée plus haut que l'interface String() dans cette hiérarchie, fmt.Println() donnera la priorité à la méthode Error() si les deux méthodes sont implémentées pour un objet donné. En effet, les erreurs nécessitent généralement une attention plus urgente et doivent être communiquées rapidement de manière claire et concise.

Dans l'exemple fourni, le type Person implémente à la fois les méthodes String() et Error(). Cependant, la méthode Error() renvoie simplement la chaîne « Failed », tandis que la méthode String() fournit une description plus informative de la personne. Lorsque vous imprimez des instances du type Personne à l'aide de fmt.Println(), vous ne verrez que le message « Échec » car la méthode Error() a priorité sur la méthode String() en raison de la hiérarchie susmentionnée.

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