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

  1. Vytvorí sa kontext s časovým limitom alebo timeoutom, napríklad context.WithTimeout.
  2. Po uplynutí času je kontext automaticky zrušený.
  3. Goroutine, ktorá počúva tento kontext, dostane signál zrušenia cez kanál Done().
  4. 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čí.