Warum priorisiert das „fmt'-Paket von Go beim Drucken „Error()' gegenüber „String()'?

Barbara Streisand
Freigeben: 2024-11-24 02:33:10
Original
886 Leute haben es durchsucht

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

Priorisierung von Error() gegenüber String()

In Go übernimmt das fmt-Paket Druckvorgänge. Wenn für ein Objekt sowohl die Methoden Error() als auch String() implementiert sind, hat die Methode Error() für Druckzwecke Vorrang vor String().

Diese Priorisierung ergibt sich aus der praktischen Bedeutung von Fehlern. Die Übermittlung von Fehlern ist in der Regel wichtiger als allgemeine Zeichenfolgendarstellungen. Wenn daher ein Objekt die Fehlerschnittstelle implementiert, wird seine Error()-Methode zum Formatieren und Drucken verwendet.

Dieses Verhalten ist in der Paketdokumentation für fmt dokumentiert. Der folgende Auszug erläutert die Rangfolge:

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).
Nach dem Login kopieren

Beispiel

Betrachten Sie den folgenden Code:

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)
}
Nach dem Login kopieren

In diesem Beispiel die Person Der Typ implementiert sowohl die Methoden String() als auch Error(). Wenn die Funktion fmt.Println() aufgerufen wird, wird die Methode Error() anstelle von String() aufgerufen, was zu der folgenden Ausgabe führt:

Failed Failed
Nach dem Login kopieren

Dies zeigt die Priorisierung von Error() gegenüber String( ) in der Druckfunktion von Go.

Das obige ist der detaillierte Inhalt vonWarum priorisiert das „fmt'-Paket von Go beim Drucken „Error()' gegenüber „String()'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage