Warum priorisiert „fmt.Println' „Error()' gegenüber „String()' in Go?

DDD
Freigeben: 2024-11-20 20:09:16
Original
524 Leute haben es durchsucht

Why Does `fmt.Println` Prioritize `Error()` over `String()` in Go?

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

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage