Sobes.tech
Middle

Go'da bağlam nedir? Ne için kullanılır? Zaman aşımıyla iptal nasıl çalışır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da, context bir paket ve operasyonların yaşam süresini yönetmek, iptal sinyalleri iletmek ve goroutine'ler arasında zaman aşımı belirlemek için bir kavramdır.

Context'in temel görevleri:

  • Operasyonları iptal etmek (örneğin, zaman aşımı veya kullanıcı tarafından iptal edilmesi durumunda),
  • Değerleri iletmek (örneğin, istek kimliği) çağrı zinciri boyunca,
  • Zaman aşımı (timeout) ayarlamak.

Zaman aşımıyla iptal şu şekilde çalışır:

  1. Bir zaman aşımı veya timeout ile context oluşturulur, örneğin, context.WithTimeout.
  2. Süre dolduğunda, context otomatik olarak iptal edilir.
  3. Bu context'i dinleyen goroutine, Done() kanalı aracılığıyla iptal sinyali alır.
  4. Goroutine, iptali düzgün şekilde işlemesi gerekir (örneğin, işi durdurup kaynakları serbest bırakmak).

Örnek:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case <-time.After(3 * time.Second):
    fmt.Println("İşlem tamamlandı")
case <-ctx.Done():
    fmt.Println("İşlem iptal edildi veya zaman aşımına uğradı")
}

Burada, işlem 2 saniye sonra, eğer daha önce tamamlanmazsa, iptal edilir.