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
Barbara Streisandoriginal
2024-12-04 02:47:09742parcourir

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
}

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!

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