В чем разница между WithTimeout и WithDedline

«В чем разница между WithTimeout и WithDedline» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оба метода создают контекст с ограничением времени, но работают по-разному:

  1. WithTimeout принимает duration (относительное время):
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
  1. WithDeadline принимает конкретный момент времени (абсолютное время):
deadline := time.Now().Add(2 * time.Second)
ctx, cancel := context.WithDeadline(context.Background(), deadline)

Ключевые отличия:

  • WithTimeout удобнее для относительных интервалов ("ждать 5 секунд")
  • WithDeadline полезен когда известно точное время завершения
  • Оба возвращают cancel-функцию, которую нужно вызывать для освобождения ресурсов
  • При срабатывании таймаута/дедлайна контекст автоматически отменяется

Под капотом WithTimeout просто вызывает WithDeadline, добавляя duration к текущему времени.