Middle
Šta je kontekst u Go? Čemu služi? Kako funkcioniše otkazivanje po timeout-u?
sobes.tech АИ
Одговор од АИ
У Go, context је пакет и концепт за управљање животним веком операција, пренос сигнала о отказу и постављање временских ограничења између горутинa.
Главни задаци контекста:
- Отказивање операција (на пример, при истеку времена или отказу од стране корисника),
- Пренос вредности (на пример, ID захтева) кроз ланац позива,
- Постављање временских ограничења (timeout-ова).
Отказивање по timeout-у ради овако:
- Креира се контекст са временским лимитом или timeout-ом, на пример,
context.WithTimeout. - После истека времена, контекст се аутоматски отказује.
- Горутина која слуша овај контекст добија сигнал отказа преко канала
Done(). - Горутина треба правилно да обради отказ (на пример, да прекине рад и ослободи ресурсе).
Пример:
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 секунде ако не заврши раније.