Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: golang, context, cancellation, lifecycle

Почему в Go не стоит передавать context.Context как поле структуры?

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

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

context.Context предназначен для передачи через параметры функций, а не для хранения в структурах. Хранение контекста приводит к утечкам, неправильному времени жизни и сложным багам с отменой операций. Контекст должен отражать текущий запрос, а не жить дольше него.

Длинный ответ

context.Context в Go используется для управления временем жизни операций: отмены, таймауты, дедлайны и request-scoped данные. Его ключевая идея — контекст живёт столько же, сколько запрос или операция.

Когда context.Context кладут в структуру:

  • теряется контроль над временем жизни контекста;

  • структура может пережить запрос, но контекст — уже отменён;

  • невозможно понять, кто и когда обязан вызывать cancel;

  • появляется риск утечек горутин, ожидающих ctx.Done().

Контекст должен передаваться явно сверху вниз по стеку вызовов:

func (s *Service) Handle(ctx context.Context, req Request) error {
		return s.repo.Save(ctx, req)
}

Исключение — крайне редкие инфраструктурные случаи (например, root-context приложения), но даже там обычно используют локальные переменные, а не поля структур.

Вывод: context.Context передаётся параметром, не хранится в структурах и не используется как долгоживущая зависимость.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Golang

    Golang

Ключевые слова

#golang

#context

#cancellation

#lifecycle

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.