Maison > développement back-end > Golang > Pourquoi « fmt.Println » imprime-t-il « mauvaise erreur » au lieu de la valeur entière lorsqu'un type implémente l'interface « erreur » ?

Pourquoi « fmt.Println » imprime-t-il « mauvaise erreur » au lieu de la valeur entière lorsqu'un type implémente l'interface « erreur » ?

Susan Sarandon
Libérer: 2024-12-09 07:46:07
original
769 Les gens l'ont consulté

Why Does `fmt.Println` Print

Pourquoi une interface renvoie-t-elle ""mauvaise erreur"" pour la méthode d'erreur d'un type personnalisé ?

Dans Go, une interface peut être utilisée pour définir des méthodes pour un type. Lorsqu'un objet implémente une interface, il fournit une implémentation pour chacune des méthodes définies par cette interface.

Considérons l'exemple suivant :

type T int

func (t T) Error() string {
    return "bad error"
}

func main() {
    var v interface{} = T(5)
    fmt.Println(v) // Output: "bad error"
}
Copier après la connexion

Dans cet exemple, la méthode Error est définie pour le type T. Cependant, lorsque la valeur v est imprimée à l'aide de fmt.Println, le résultat est "mauvaise erreur" au lieu de la valeur entière attendue 5. Pour comprendre ce comportement, référons-nous au Documentation du package fmt :

  • Si un opérande implémente l'interface d'erreur, la méthode Error sera invoquée pour convertir l'objet en chaîne, qui sera ensuite formatée comme requis par le verbe (le cas échéant).
  • Pour chaque fonction de type Printf, il existe également une fonction Print qui ne prend aucun format et équivaut à dire %v pour chaque opérande.

Dans ce cas, la fonction fmt.Println est utilisée, ce qui équivaut à fmt.Printf("%v", v). Voici une explication de ce qui se passe :

  • Puisque T implémente l'interface d'erreur, la méthode Error est invoquée sur la valeur v.
  • La méthode Error renvoie la chaîne "mauvaise erreur".
  • Cette chaîne est ensuite formatée par le verbe %v et imprimée en sortie.

Pour imprimer l'entier valeur de v à la place, vous pouvez utiliser fmt.Printf("%d",v).

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