Middle
Ce este contextul în Go? La ce servește? Cum funcționează anularea prin timeout?
sobes.tech AI
Răspuns de la AI
În Go, context este un pachet și un concept pentru gestionarea duratei de viață a operațiunilor, transmiterea semnalelor de anulare și stabilirea limitelor de timp între goroutine-uri.
Sarcinile principale ale contextului:
- Anularea operațiunilor (de exemplu, în cazul timeout-ului sau anulării de către utilizator),
- Transmiterea valorilor (de exemplu, ID-ul solicitării) prin lanțul de apeluri,
- Stabilirea limitelor de timp (timeout-uri).
Anularea prin timeout funcționează astfel:
- Se creează un context cu un timp limită sau timeout, de exemplu,
context.WithTimeout. - La expirarea timpului, contextul este automat anulat.
- Goroutine-ul care ascultă acest context primește un semnal de anulare prin canalul
Done(). - Goroutine-ul trebuie să gestioneze corect anularea (de exemplu, să întrerupă munca și să elibereze resursele).
Exemplu:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("operație finalizată")
case <-ctx.Done():
fmt.Println("operație anulată sau expirată")
}
Aici, operația va fi întreruptă după 2 secunde dacă nu se finalizează mai devreme.