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 ?
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 }
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
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!