Middle
Co je to kontext v Go? K čemu se používá? Jak funguje zrušení pomocí časového limitu?
sobes.tech AI
Odpověď od AI
V Go je context balíček a koncept pro správu životnosti operací, přenos signálů o zrušení a stanovení časových limitů mezi gorutinami.
Hlavní úkoly kontextu:
- Zrušení operací (například při timeoutu nebo zrušení uživatelem),
- Přenos hodnot (například ID požadavku) přes řetězec volání,
- Nastavení časových limitů (timeoutů).
Zrušení na základě timeoutu funguje takto:
- Vytvoří se kontext s časovým limitem nebo timeoutem, například
context.WithTimeout. - Po uplynutí času je kontext automaticky zrušen.
- Goroutine, která poslouchá tento kontext, obdrží signál zrušení přes kanál
Done(). - Goroutine musí správně zpracovat zrušení (například přerušit práci a uvolnit zdroje).
Příklad:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("operace dokončena")
case <-ctx.Done():
fmt.Println("operace zrušena nebo vypršela")
}
Zde bude operace přerušena po 2 sekundách, pokud se dříve nezakončí.