Чем отличается использование функции WithTimeout от WithDeadline в контексте контроля времени выполнения?

Функции WithTimeout и WithDeadline в Go используются для создания контекста с ограничением по времени, но отличаются способом задания этого ограничения:

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

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

Функции WithTimeout и WithDeadline в Go используются для создания контекста с ограничением по времени, но отличаются способом задания этого ограничения:

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

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

Функции WithTimeout и WithDeadline в Go используются для создания контекста с ограничением по времени, но отличаются способом задания этого ограничения:

  • WithTimeout(parent, timeout) создает контекст, который автоматически отменяется через заданный промежуток времени timeout от текущего момента. То есть таймер запускается с момента вызова.
  • WithDeadline(parent, deadline) создает контекст, который отменяется в конкретный момент времени deadline (типа time.Time). Это позволяет задать точное время, когда контекст истечет.

Пример:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 отменится через 5 секунд от сейчас

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 отменится ровно в момент deadline

Таким образом, WithTimeout удобен, когда нужно задать длительность, а WithDeadline — когда важен конкретный момент времени.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку