Sobes.tech
Back to questions
Middle
2

Как работает наследование контекстов в Go?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

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

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

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

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

Пример:

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

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

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

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