Maison > développement back-end > Golang > Pourquoi fmt.Println imprime-t-il « mauvaise erreur » au lieu de 5 lorsqu'un entier implémente l'interface d'erreur dans Go ?

Pourquoi fmt.Println imprime-t-il « mauvaise erreur » au lieu de 5 lorsqu'un entier implémente l'interface d'erreur dans Go ?

Barbara Streisand
Libérer: 2024-12-04 02:47:09
original
916 Les gens l'ont consulté

Why Does fmt.Println Print

Interface Golang : Comprendre la transformation d'un entier en « mauvaise erreur »

Lorsque vous travaillez avec des interfaces dans Golang, il est essentiel de comprendre le comportement des types qui implémentent le Méthode Erreur(). Comme illustré dans l'extrait de code donné :

type T int

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

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

L'intention est de définir la méthode Error() pour le type T, en espérant imprimer la valeur 5. Cependant, la sortie affiche étonnamment "mauvaise erreur". Pour clarifier ce phénomène, il faut se plonger dans la 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 l'exige le verbe (le cas échéant). "

De plus, " 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. Une autre variante Println insère des espaces entre les opérandes et ajoute une nouvelle ligne. "

Dans ce cas, Println() est utilisé sans spécifier de format, ce qui équivaut à utiliser %v. Puisque T implémente l'interface d'erreur, la méthode Error() est invoquée, convertissant la valeur en « mauvaise erreur », qui est ensuite imprimée.

Pour imprimer la valeur entière, il est nécessaire d'utiliser un spécificateur de format spécifique, tels que :

fmt.Printf("%d", v) // Will print the integer value
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