Fehlerbehandlung und Wiederholungslogik
Statuscodes prüfen und Wiederholungen implementieren
Fehlerbehandlung und Wiederholungslogik ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
HTTP-Fehler sind keine Go-Fehler
Ein HTTP-Status 404 oder 500 ist kein Go-Fehler – http.Client.Do gibt für jede gültige HTTP-Response einen nil-Fehler zurück. Prüfen Sie resp.StatusCode ausdrücklich.
Fehler verpacken
Verpacken Sie Fehler mit fmt.Errorf("operation: %w", err) und ergänzen Sie Kontext, damit Aufrufer die Ursache mit errors.Is / errors.As untersuchen können.
if err != nil {
return fmt.Errorf("fetch users: %w", err)
}Wiederholbare und nicht wiederholbare Fehler
Wiederholen Sie den Versuch bei Netzwerk-Timeouts, 429 Too Many Requests und 503 Service Unavailable. Nicht wiederholen bei 400 Bad Request, 401 Unauthorized und 404 Not Found – ein erneuter Versuch hilft nicht.
Exponentieller Backoff
Warten Sie zwischen den einzelnen Versuchen jeweils länger, um einen überlasteten Server zu entlasten. Eine einfache Implementierung:
for i := 0; i < maxRetries; i++ {
resp, err := client.Do(req)
if err == nil && resp.StatusCode < 500 { break }
time.Sleep(time.Duration(math.Pow(2, float64(i))) * time.Second)
}Jitter
Fügen Sie dem Backoff einen zufälligen Jitter hinzu, damit nicht mehrere Clients gleichzeitig einen neuen Versuch starten (Thundering-Herd-Effekt).
wait := time.Duration(math.Pow(2, float64(i)))*time.Second + time.Duration(rand.Intn(1000))*time.MillisecondRetry-After-Header
Eine 429-Response enthält häufig einen Retry-After-Header. Parsen und berücksichtigen Sie ihn, statt einen festen Backoff zu verwenden.
retryAfter := resp.Header.Get("Retry-After")
if secs, err := strconv.Atoi(retryAfter); err == nil {
time.Sleep(time.Duration(secs) * time.Second)
}Kontextabhängige Retries
Prüfen Sie den Context vor jedem neuen Versuch, damit keine weiteren Versuche unternommen werden, wenn die Anfrage abgebrochen wurde.
for i := 0; i < maxRetries; i++ {
if ctx.Err() != nil { return nil, ctx.Err() }
// attempt
}Benutzerdefinierte Fehlertypen
Definieren Sie typisierte HTTP-Fehler, die den Statuscode und den Body enthalten, damit Aufrufer differenzierte Entscheidungen über erneute Versuche treffen können.
type HTTPError struct {
Status int
Body string
}
func (e *HTTPError) Error() string { return fmt.Sprintf("HTTP %d: %s", e.Status, e.Body) }Bibliotheksoptionen
Ziehen Sie hashicorp/go-retryablehttp oder cenkalti/backoff für die Retry-Logik in Produktionssystemen in Betracht. Diese Bibliotheken bieten konfigurierbare Backoff-Richtlinien, eine maximale Anzahl von Versuchen und Context-Unterstützung.
Idempotenzschlüssel
Fügen Sie bei wiederholten POST-Anfragen einen Idempotenzschlüssel (UUID) als Header hinzu, damit der Server Wiederholungen dedupliziert und dasselbe Ergebnis zurückgibt, ohne doppelte Ressourcen zu erstellen.
Circuit Breaker
Ein Circuit Breaker verfolgt Fehlerraten und stoppt während einer Abkühlphase das Senden von Anfragen an einen fehlerhaften Service. Bibliotheken wie sony/gobreaker implementieren dieses Muster.
Kurzer Test
Warum sollten Sie einem exponentiellen Backoff einen Jitter hinzufügen?
Zusammenfassung: Fehlerbehandlung und Retries
Wichtige Punkte:
- Prüfen Sie resp.StatusCode – HTTP-Fehler sind keine Go-Fehler
- Wiederholen Sie den Versuch bei 429, 503 und Netzwerk-Timeouts, aber nicht bei 4xx-Clientfehlern
- Exponentieller Backoff plus Jitter verhindert den Thundering-Herd-Effekt
- Prüfen Sie vor jedem erneuten Versuch den Context
Häufig gestellte Fragen
Ist die Lektion „Fehlerbehandlung und Wiederholungslogik“ kostenlos?
Ja — der vollständige Text von „Fehlerbehandlung und Wiederholungslogik“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Fehlerbehandlung und Wiederholungslogik“?
Statuscodes prüfen und Wiederholungen implementieren Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Fehlerbehandlung und Wiederholungslogik“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- HTTP-Anfragen senden
- Timeouts und Header festlegen
- JSON-Antworten dekodieren
- Fehlerbehandlung und Wiederholungslogik