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

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

Barbara Streisand
Libérer: 2024-11-24 02:33:10
original
872 Les gens l'ont consulté

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

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

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

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!

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