Heim > Artikel > Backend-Entwicklung > Warum priorisiert das „fmt'-Paket von Go beim Drucken „Error()' gegenüber „String()'?
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).
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) }
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
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!