0Pricing
Go Academy · Lektion

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.Millisecond

Retry-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

  1. HTTP-Anfragen senden
  2. Timeouts und Header festlegen
  3. JSON-Antworten dekodieren
  4. Fehlerbehandlung und Wiederholungslogik
← Zurück zu Go Academy