Maison > développement back-end > Golang > le corps du texte

Pourquoi `fmt.Println` donne-t-il la priorité à `Error()` par rapport à `String()` dans Go ?

DDD
Libérer: 2024-11-20 20:09:16
original
524 Les gens l'ont consulté

Why Does `fmt.Println` Prioritize `Error()` over `String()` in Go?

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)
}
Copier après la connexion

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
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal