Vorrang von Error() vor String() in fmt.Println
In Go beim Drucken von Objekten mit fmt.Println der String ()-Methode wird normalerweise verwendet, um das Objekt zum Drucken in eine Zeichenfolge umzuwandeln. In bestimmten Fällen hat die Methode Error() jedoch Vorrang vor String().
Dieses Verhalten wird durch die Implementierung von fmt.Println definiert. In der Paketdokumentation heißt es, dass die Methode Error() aufgerufen wird, um das Objekt in einen String zu konvertieren, wenn ein Objekt die Fehlerschnittstelle implementiert. Diese Zeichenfolge wird dann entsprechend den Anforderungen des Verbs (falls vorhanden) formatiert.
Die Implementierung von Error() erhält eine höhere Priorität als String(), da Fehler in der Praxis als wichtiger angesehen werden. Dadurch wird sichergestellt, dass alle Fehler deutlich angezeigt werden, auch wenn eine benutzerdefinierte String()-Methode definiert ist.
Um dieses Konzept zu veranschaulichen, betrachten Sie das folgende Beispiel:
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 beides Personentypen implementieren die Methoden String() und Error(). Wenn die Objekte jedoch mit fmt.Println gedruckt werden, wird die Methode Error() anstelle von String() aufgerufen, was zu der folgenden Ausgabe führt:
Failed Failed
Dies liegt daran, dass Error() eine höhere Priorität hat als String() in fmt.Println, um sicherzustellen, dass etwaige Fehler klar angezeigt werden.
Daher ist es wichtig, bei der Arbeit mit Objekten, die sowohl Error() als auch String() implementieren, die gewünschte Ausgabe zu berücksichtigen und anzupassen Umsetzung entsprechend.
Das obige ist der detaillierte Inhalt vonWarum priorisiert „fmt.Println' „Error()' gegenüber „String()' in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!