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 ?

Pourquoi le package `fmt` de Go donne-t-il la priorité à `Error()` par rapport à `String()` lors de l'impression ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-24 02:33:10873parcourir

Why Does Go's `fmt` Package Prioritize `Error()` Over `String()` When Printing?

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!

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