Heim > Backend-Entwicklung > Golang > Wie kann ich Endlosschleifen bei der Behandlung benutzerdefinierter Fehler in Go verhindern?

Wie kann ich Endlosschleifen bei der Behandlung benutzerdefinierter Fehler in Go verhindern?

Barbara Streisand
Freigeben: 2024-12-13 16:06:14
Original
808 Leute haben es durchsucht

How Can I Prevent Infinite Loops When Handling Custom Errors in Go?

Nicht-rekursive Fehlerbehandlung: Endlosschleifen verhindern

In Go werden Ausnahmesituationen typischerweise mithilfe von Fehlerwerten behandelt, die die Fehlerschnittstelle implementieren. Die Error()-Methode der Schnittstelle gibt eine Zeichenfolge zurück, die den Fehler beschreibt.

Bei der Arbeit mit benutzerdefinierten Fehlertypen ist es jedoch wichtig, eine Rekursion in der Error()-Methode zu vermeiden.

The Infinite Schleifenproblem

Stellen Sie sich einen benutzerdefinierten Fehlertyp vor, bei dem die Methode Error() fmt.Sprint(e) aufruft, um den Fehlerwert in eine Zeichenfolge umzuwandeln. Dieser Ansatz stellt ein potenzielles Problem dar:

type MyError struct {
    message string
}

func (e MyError) Error() string {
    return fmt.Sprint(e)
}
Nach dem Login kopieren

Wenn Sie nun versuchen, den Fehler auszudrucken, kommt es zu einer Endlosschleife:

func main() {
    err := MyError{"Error!"}
    fmt.Println(err)
}
Nach dem Login kopieren

Dies geschieht, weil fmt.Sprint(e) e aufruft .Error(), was wiederum fmt.Sprint(e) erneut aufruft, und so weiter.

Breaking the Rekursion

Um die Rekursion zu unterbrechen, konvertieren Sie e in einen Wert, der keine String- oder Error-Methode hat, bevor Sie ihn an fmt.Sprint übergeben:

func main() {
    err := MyError{"Error!"}
    fmt.Println(fmt.Sprint(float64(err)))
}
Nach dem Login kopieren

In diesem Beispiel wird die Konvertierung von e zu einem float64 entfernt seine String- und Error-Methoden und verhindert so die Endlosschleife.

Das obige ist der detaillierte Inhalt vonWie kann ich Endlosschleifen bei der Behandlung benutzerdefinierter Fehler in Go verhindern?. 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