Можно ли передавать значения через context в Go, зачем это нужно и какие примеры уместны?

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

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

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

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

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

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

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

Когда создаётся новый контекст на основе родительского (например, через context.WithCancel, context.WithTimeout или context.WithValue), он "наследует" состояние родителя:

  • Если родительский контекст отменяется, то автоматически отменяются и все дочерние.
  • Значения, сохранённые в родительском контексте, доступны дочерним, если они не переопределены.

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

Пример:

parentCtx := context.Background()
ctx, cancel := context.WithCancel(parentCtx)

// ctx наследует parentCtx

// Если вызвать cancel(), ctx и все его потомки будут отменены

// Можно также создавать дочерние контексты от ctx, и отмена будет распространяться вниз

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

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

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

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