Maison > Article > développement back-end > Pourquoi le package `fmt` de Go donne-t-il la priorité à `Error()` par rapport à `String()` lors de l'impression ?
Priorité de Error() sur String()
Dans Go, le package fmt gère les opérations d'impression. Lorsqu'un objet a à la fois les méthodes Error() et String() implémentées, la méthode Error() a priorité sur String() à des fins d'impression.
Cette hiérarchisation découle de l'importance pratique des erreurs. Les erreurs sont généralement plus importantes à transmettre que les représentations générales sous forme de chaîne. Par conséquent, si un objet implémente l'interface d'erreur, sa méthode Error() est utilisée pour le formatage et l'impression.
Ce comportement est documenté dans la documentation du package pour fmt. L'extrait suivant explique l'ordre de priorité :
3. If an operand implements the error interface, the Error method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any). 4. If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).
Exemple
Considérez le code 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, la Personne type implémente les méthodes String() et Error(). Lorsque la fonction fmt.Println() est appelée, la méthode Error() est invoquée à la place de String(), ce qui donne le résultat suivant :
Failed Failed
Cela démontre la priorité de Error() sur String( ) dans la fonctionnalité d'impression de Go.
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!