Sobes.tech
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:

  1. Vytvoří se kontext s časovým limitem nebo timeoutem, například context.WithTimeout.
  2. Po uplynutí času je kontext automaticky zrušen.
  3. Goroutine, která poslouchá tento kontext, obdrží signál zrušení přes kanál Done().
  4. 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čí.