Sobes.tech
Middle

Какво е контекст в Go? За какво се използва? Как работи отменянето по таймаут?

sobes.tech AI

Отговор от AI

В Go context е пакет и концепция за управление на живота на операциите, предаване на сигнали за отмена и задаване на времеви ограничения между горутините.

Основните задачи на контекста:

  • Отмяна на операции (например, при изтичане на време или отмена от потребителя),
  • Предаване на стойности (например, ID на заявката) през веригата от извиквания,
  • Настройване на времеви ограничения (таймаути).

Отмяната при таймаут работи по следния начин:

  1. Създава се контекст с таймаут или ограничение във времето, например 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("операцията е отменена или изтекъл таймаут")
}

Тук операцията ще бъде прекъсната след 2 секунди, ако не приключи по-рано.