Sobes.tech
Middle

Kas yra kontekstas Go? Kam jis naudojamas? Kaip veikia laiko limituotas atšaukimas?

sobes.tech AI

Atsakymas iš AI

Go kalba context yra paketas ir koncepcija, skirta valdyti operacijų gyvavimo laiką, perduoti atšaukimo signalus ir nustatyti laiko limitus tarp gorutinų.

Pagrindinės konteksto užduotys:

  • Atšaukti operacijas (pavyzdžiui, laiko limitas arba naudotojo atšaukimas),
  • Perduoti reikšmes (pavyzdžiui, užklausos ID) per kvietimų grandinę,
  • Nustatyti laiko limitus (timeout'us).

Laiko limitu pagrįstas atšaukimas veikia taip:

  1. Sukuriamas kontekstas su laiko limitu arba timeout'u, pavyzdžiui, context.WithTimeout.
  2. Pasibaigus laikui, kontekstas automatiškai atšaukiamas.
  3. Gorutina, kuri klausosi šio konteksto, gauna atšaukimo signalą per Done() kanalą.
  4. Gorutina turi tinkamai tvarkyti atšaukimą (pavyzdžiui, nutraukti darbą ir atlaisvinti išteklius).

Pavyzdys:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case <-time.After(3 * time.Second):
    fmt.Println("operacija baigta")
case <-ctx.Done():
    fmt.Println("operacija atšaukta arba pasibaigė laiko limitas")
}

Čia operacija bus nutraukta po 2 sekundžių, jei ji nebus anksčiau baigta.