Что будет с контекстом если его значение использовать на двух разных уровнях

«Что будет с контекстом если его значение использовать на двух разных уровнях» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Контекст в Go передаётся по значению, но содержит ссылку на общие данные. Если изменить контекст на одном уровне (например, добавить значение через context.WithValue), это не затронет оригинальный контекст, но создаст новый производный контекст. На разных уровнях цепочки каждый будет видеть только свои и родительские значения.

ctx := context.Background()
ctx1 := context.WithValue(ctx, "key", "value1") // новый контекст
ctx2 := context.WithValue(ctx, "key", "value2") // другой новый контекст

fmt.Println(ctx1.Value("key")) // "value1"
fmt.Println(ctx2.Value("key")) // "value2"

Важно: контексты иммутабельны, изменения не затрагивают родительские контексты.