Go Context Paketi: WithCancel, WithTimeout & Graceful Shutdown
Kullanıcı sayfayı kapattığında arkadaki tüm veritabanı sorgularını anında iptal etme emri.
Merkezden gelen "Geri çekilin!" telsiz anonsudur. Bir operasyon iptal edildiğinde (Cancel/Timeout) operasyona bağlı tüm askerler (alt goroutine'ler) derhal işi bırakır.
Context paketi API sınırları boyunca deadline, iptal sinyali (cancellation) ve istek kapsamlı değişkenleri (request-scoped values) taşır. context.WithTimeout ile süre dolduğunda context.Done() kanalı sinyal yayar ve tüm bağlı I/O operasyonları derhal sonlandırılır.
“Context, dağıtık sistemlerde kaynak israfını önleyen en kritik Go yapısıdır. Bir HTTP isteği kesildiğinde veya 2 saniye kuralı aşıldığında context.Done() kanalı kapanır; altındaki veritabanı ve HTTP istekleri erken sonlandırılarak sunucu kaynakları kurtarılır.”
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", "https://api.external.com", nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
// Context timeout yakalanır!
}
defer cancel() çağırmayı unutarak context kaynaklarının bellekten temizlenmesini engellemek.