Error() Priority Over String() in Go
In Go verarbeitet das fmt-Paket Druckwerte basierend auf ihrem Typ. Wenn ein Objekt sowohl die Methoden Error() als auch String() implementiert, hat die Methode Error() Vorrang. Dieses Verhalten ist auf die Implementierung von fmt zurückzuführen, das die Fehlerbehandlung priorisiert.
Laut der fmt-Paketdokumentation wird, wenn ein Operand die Fehlerschnittstelle implementiert, zuvor die Methode Error() aufgerufen, um das Objekt in einen String zu konvertieren Anwenden einer beliebigen Formatierung. Diese Logik überschreibt die String()-Methode, die standardmäßig für Operanden aufgerufen wird, die sie implementieren.
Der folgende Code demonstriert dieses Verhalten:
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) }
Ausgabe:
Failed Failed
Obwohl in diesem Beispiel der Typ Person sowohl String() als auch Error() implementiert, wird die Funktion fmt.Println gedruckt „Fehlgeschlagen“ für beide Personen, da die Methode Error() Vorrang hat. Dies liegt daran, dass Fehler als kritischer gelten und sofortige Aufmerksamkeit erfordern.
Das obige ist der detaillierte Inhalt vonWarum bevorzugt das „fmt'-Paket von Go „Error()' gegenüber „String()', wenn beide implementiert sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!