0Pricing
Go Academy · Ders

Hata Yönetimi ve Yeniden Deneme Mantığı

Durum kodlarını denetleme ve yeniden denemeler uygulama

Hata Yönetimi ve Yeniden Deneme Mantığı, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

HTTP hataları Go hataları değildir

HTTP 404 veya 500 durumu bir Go hatası değildir — http.Client.Do, geçerli tüm HTTP yanıtları için nil hata döndürür. resp.StatusCode değerini açıkça denetleyin.

Hataları sarmalama

Hataları fmt.Errorf("operation: %w", err) kullanarak bağlam bilgisiyle sarın; böylece çağıranlar nedeni errors.Is / errors.As ile inceleyebilir.

if err != nil {
    return fmt.Errorf("fetch users: %w", err)
}

Yeniden denenebilir ve denenemez hatalar

Yeniden deneyin: ağ zaman aşımları, 429 Too Many Requests, 503 Service Unavailable. Yeniden denemeyin: 400 Bad Request, 401 Unauthorized, 404 Not Found — yeniden denemek yardımcı olmaz.

Üstel geri çekilme

Zorlanan bir sunucunun yükünü azaltmak için her yeniden deneme arasında daha uzun bekleyin. Basit bir uygulama:

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)
}

Rastgele sapma

Birden çok istemcinin aynı anda yeniden denemesini (sürü etkisini) önlemek için geri çekilme süresine rastgele sapma ekleyin.

wait := time.Duration(math.Pow(2, float64(i)))*time.Second + time.Duration(rand.Intn(1000))*time.Millisecond

Retry-After üstbilgisi

429 yanıtı çoğunlukla bir Retry-After üstbilgisi içerir. Sabit bir geri çekilme süresi kullanmak yerine bu değeri ayrıştırıp uygulayın.

retryAfter := resp.Header.Get("Retry-After")
if secs, err := strconv.Atoi(retryAfter); err == nil {
    time.Sleep(time.Duration(secs) * time.Second)
}

Bağlam duyarlı yeniden denemeler

İstek iptal edildiyse yeniden denemeyi durdurmak için her yeniden deneme girişiminden önce bağlamı denetleyin.

for i := 0; i < maxRetries; i++ {
    if ctx.Err() != nil { return nil, ctx.Err() }
    // attempt
}

Özel hata türleri

Durum kodunu ve gövdeyi taşıyan türlenmiş HTTP hataları tanımlayarak çağıranların ayrıntılı yeniden deneme kararları almasını sağlayın.

type HTTPError struct {
    Status int
    Body   string
}
func (e *HTTPError) Error() string { return fmt.Sprintf("HTTP %d: %s", e.Status, e.Body) }

Kitaplık seçenekleri

Yapılandırılabilir geri çekilme ilkeleri, maksimum yeniden deneme sayısı ve bağlam desteğiyle üretim ortamına uygun yeniden deneme mantığı için hashicorp/go-retryablehttp veya cenkalti/backoff kullanmayı değerlendirin.

İdempotensi anahtarları

Yeniden denenen POST isteklerinde bir idempotensi anahtarını (UUID) üstbilgiye ekleyin; böylece sunucu yeniden denemeleri tekilleştirir ve yinelenen kaynaklar oluşturmadan aynı sonucu döndürür.

Devre kesici

Devre kesici, hata oranlarını izler ve başarısız olan bir hizmete soğuma süresi boyunca istek gönderilmesini durdurur. sony/gobreaker gibi kitaplıklar bu örüntüyü uygular.

Hızlı Kontrol

Üstel geri çekilme süresine neden rastgele sapma eklemelisiniz?

Özet: Hata İşleme ve Yeniden Deneme

Temel noktalar:

  • resp.StatusCode değerini denetleyin — HTTP hataları Go hataları değildir
  • 429, 503 ve ağ zaman aşımlarında yeniden deneyin; 4xx istemci hatalarında denemeyin
  • Üstel geri çekilme + rastgele sapma, sürü etkisini önler
  • Yeniden denemeden önce her zaman bağlamı denetleyin

Sıkça Sorulan Sorular

“Hata Yönetimi ve Yeniden Deneme Mantığı” dersi ücretsiz mi?

Evet — “Hata Yönetimi ve Yeniden Deneme Mantığı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Hata Yönetimi ve Yeniden Deneme Mantığı” dersinde ne öğreneceğim?

Durum kodlarını denetleme ve yeniden denemeler uygulama Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Hata Yönetimi ve Yeniden Deneme Mantığı” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. HTTP İstekleri Gönderme
  2. Zaman Aşımları ve Üst Bilgileri Ayarlama
  3. JSON Yanıtlarının Kodunu Çözme
  4. Hata Yönetimi ve Yeniden Deneme Mantığı
← Go Academy Sayfasına Dön