Что знаешь про работу с контекстом в Go? Какие методы у него есть?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Основные методы и функции:

  • context.Background() — возвращает пустой контекст, обычно используется как корневой.
  • context.TODO() — заглушка, когда контекст еще не определен.
  • WithCancel(parent Context) — возвращает новый контекст и функцию отмены, позволяет отменить операции.
  • WithDeadline(parent Context, deadline time.Time) — создает контекст с дедлайном.
  • WithTimeout(parent Context, timeout time.Duration) — создает контекст с таймаутом.
  • WithValue(parent Context, key, val interface{}) — создает контекст с привязанным значением.

Пример:

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

select {
case <-time.After(3 * time.Second):
    fmt.Println("operation finished")
case <-ctx.Done():
    fmt.Println("operation canceled or timed out")
}

Контекст помогает контролировать время жизни операций и передавать параметры без глобальных переменных.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее