Précédence de Error() sur String() dans fmt.Println
Dans Go, lors de l'impression d'objets à l'aide de fmt.Println, la chaîne () est généralement utilisée pour convertir l'objet en chaîne à imprimer. Cependant, dans certains cas, la méthode Error() est prioritaire sur String().
Ce comportement est défini par l'implémentation de fmt.Println. La documentation du package indique que si un objet implémente l'interface d'erreur, la méthode Error() sera invoquée pour convertir l'objet en chaîne. Cette chaîne est ensuite formatée comme requis par le verbe (le cas échéant).
L'implémentation de Error() a une priorité plus élevée que String() car les erreurs sont considérées comme plus importantes dans la pratique. Cela garantit que toutes les erreurs sont clairement affichées, même si une méthode String() personnalisée est définie.
Pour illustrer ce concept, considérons l'exemple suivant :
package main import "fmt" type Person struct { Name string Age int } func (p *Person) String() string { return fmt.Sprintf("%v (%v years)", p.Name, p.Age) } func (p *Person) Error() string { return fmt.Sprintf("Failed") } func main() { a := &Person{"Arthur Dent", 42} z := &Person{"Zaphod Beeblebrox", 9001} fmt.Println(a, z) }
Dans cet exemple, les deux Les types de personnes implémentent les méthodes String() et Error(). Cependant, lorsque les objets sont imprimés à l'aide de fmt.Println, la méthode Error() est invoquée à la place de String(), ce qui donne le résultat suivant :
Failed Failed
C'est parce que Error() a une priorité plus élevée que String() dans fmt.Println, garantissant que toutes les erreurs sont clairement affichées.
Par conséquent, lorsque vous travaillez avec des objets qui implémentent à la fois Error() et String(), il est important de prendre en compte le résultat souhaité et d'ajuster le mise en œuvre en conséquence.
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!