tgoop.com/go_interview_lib/359
Last Update:
💬 Почему следует избегать использования context.Background() напрямую? Какие есть альтернативы?
Использование context.Background()
напрямую не рекомендуется, потому что он не предоставляет способа остановить или отменить операции, если что-то пойдет не так. Этот контекст самый простой, без значений, сроков и сигналов отмены. Это может стать проблемой, когда задачи застревают или требуют плавного завершения.
Чтобы справиться с этим, лучше использовать context.WithTimeout
, context.WithCancel
или context.WithDeadline
. Эти контексты позволяют задавать время ожидания или возможность отмены, что делает горутины более управляемыми и надежными.
📌 Вот примеры использования:
🔸 context.WithTimeout(ctx, duration)
: задает время ожидания для выполнения задачи.
🔸 context.WithCancel(ctx)
: позволяет отменить задачу вручную.
🔸 context.WithDeadline(ctx, deadline)
: устанавливает конкретное время завершения задачи.
Можно также использовать функции с суффиксом Cause
(например, context.WithTimeoutCause
), которые дают более детальные сообщения об ошибках (например, "context deadline exceeded: custom message").
В случае работы с каналами, чтобы не ждать ответа бесконечно, можно использовать конструкцию select
с тайм-аутом:
select {
case result := <-ch:
fmt.Println("Received result:", result)
case <-time.After(5 * time.Second):
fmt.Println("Timed out")
}
Однако,
time.After
может привести к краткосрочным утечкам памяти. В таких случаях лучше использовать time.Timer
или time.Ticker
для лучшего контроля над временем.BY Библиотека Go для собеса | вопросы с собеседований
Share with your friend now:
tgoop.com/go_interview_lib/359