Sobes.tech
Middle

Šta je kontekst u Go? Čemu služi? Kako funkcioniše otkazivanje po timeout-u?

sobes.tech АИ

Одговор од АИ

У Go, context је пакет и концепт за управљање животним веком операција, пренос сигнала о отказу и постављање временских ограничења између горутинa.

Главни задаци контекста:

  • Отказивање операција (на пример, при истеку времена или отказу од стране корисника),
  • Пренос вредности (на пример, ID захтева) кроз ланац позива,
  • Постављање временских ограничења (timeout-ова).

Отказивање по timeout-у ради овако:

  1. Креира се контекст са временским лимитом или timeout-ом, на пример, context.WithTimeout.
  2. После истека времена, контекст се аутоматски отказује.
  3. Горутина која слуша овај контекст добија сигнал отказа преко канала Done().
  4. Горутина треба правилно да обради отказ (на пример, да прекине рад и ослободи ресурсе).

Пример:

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

select {
case <-time.After(3 * time.Second):
    fmt.Println("операција завршена")
case <-ctx.Done():
    fmt.Println("операција отказана или истекао timeout")
}

Овде ће операција бити прекинута након 2 секунде ако не заврши раније.