Middle
Какво е контекст в Go? За какво се използва? Как работи отменянето по таймаут?
sobes.tech AI
Отговор от AI
В Go context е пакет и концепция за управление на живота на операциите, предаване на сигнали за отмена и задаване на времеви ограничения между горутините.
Основните задачи на контекста:
- Отмяна на операции (например, при изтичане на време или отмена от потребителя),
- Предаване на стойности (например, ID на заявката) през веригата от извиквания,
- Настройване на времеви ограничения (таймаути).
Отмяната при таймаут работи по следния начин:
- Създава се контекст с таймаут или ограничение във времето, например
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("операцията е отменена или изтекъл таймаут")
}
Тук операцията ще бъде прекъсната след 2 секунди, ако не приключи по-рано.