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
Libérer: 2024-11-27 04:20:13
original
528 Les gens l'ont consulté

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!

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