Middle
Čo je to kontext v Go? Na čo sa používa? Ako funguje zrušenie po timeoute?
sobes.tech AI
Odpoveď od AI
V Go je context balíček a koncept na správu životnosti operácií, prenos signálov o zrušení a nastavenie časových limitov medzi gorutinami.
Hlavné úlohy kontextu:
- Zrušiť operácie (napríklad pri timeout alebo zrušení používateľom),
- Prenášať hodnoty (napríklad ID požiadavky) cez reťazec volaní,
- Nastaviť časové limity (timeouty).
Zrušenie na základe timeoutu funguje takto:
- Vytvorí sa kontext s časovým limitom alebo timeoutom, napríklad
context.WithTimeout. - Po uplynutí času je kontext automaticky zrušený.
- Goroutine, ktorá počúva tento kontext, dostane signál zrušenia cez kanál
Done(). - Goroutine musí správne spracovať zrušenie (napríklad prerušiť prácu a uvoľniť zdroje).
Príklad:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("operácia dokončená")
case <-ctx.Done():
fmt.Println("operácia zrušená alebo vypršal timeout")
}
Tu bude operácia prerušená po 2 sekundách, ak sa skôr nezakončí.