Heim > Backend-Entwicklung > Golang > Warum bevorzugt das „fmt'-Paket von Go „Error()' gegenüber „String()', wenn beide implementiert sind?

Warum bevorzugt das „fmt'-Paket von Go „Error()' gegenüber „String()', wenn beide implementiert sind?

Mary-Kate Olsen
Freigeben: 2024-11-28 10:58:11
Original
188 Leute haben es durchsucht

Why Does Go's `fmt` Package Prefer `Error()` Over `String()` When Both Are Implemented?

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

Ausgabe:

Failed Failed
Nach dem Login kopieren

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!

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