РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1359 of 1593 menu

Функция context.WithValue

Функция context.WithValue возвращает новый контекст, который содержит переданную пару ключ-значение. Первый параметр — родительский контекст, от которого наследуется новый. Второй параметр — ключ, по которому будет храниться значение. Третий параметр — само значение, которое нужно сохранить. Полученный контекст можно передавать вниз по цепочке вызовов, а извлечь значение можно с помощью метода Value.

Синтаксис

ctx := context.WithValue(parentCtx, key, value)

Пример

Создадим контекст с идентификатором запроса и извлечём его в дочерней функции:

package main import ( "context" "fmt" ) func main() { ctx := context.Background() ctx = context.WithValue(ctx, "requestID", "req-12345") processRequest(ctx) } func processRequest(ctx context.Context) { val := ctx.Value("requestID") fmt.Println(val) }

Результат выполнения кода:

"req-12345"

Пример

Используем пользовательский тип в качестве ключа, чтобы избежать конфликтов:

package main import ( "context" "fmt" ) type ctxKey string func main() { ctx := context.Background() key := ctxKey("user") ctx = context.WithValue(ctx, key, "Alice") printUser(ctx, key) } func printUser(ctx context.Context, key ctxKey) { val := ctx.Value(key) fmt.Println(val) }

Результат выполнения кода:

"Alice"

Пример

Контекст может хранить несколько значений, используя вложенные вызовы WithValue:

package main import ( "context" "fmt" ) func main() { ctx := context.Background() ctx = context.WithValue(ctx, "api-version", "v2") ctx = context.WithValue(ctx, "timeout", "30s") showConfig(ctx) } func showConfig(ctx context.Context) { ver := ctx.Value("api-version") tout := ctx.Value("timeout") fmt.Println("version:", ver) fmt.Println("timeout:", tout) }

Результат выполнения кода:

"version: v2" "timeout: 30s"

Смотрите также

  • функцию context.Background,
    которая возвращает пустой корневой контекст
  • метод Context.Value,
    который извлекает значение из контекста по ключу
  • функцию context.WithCancel,
    которая создаёт контекст с функцией отмены
  • функцию context.WithTimeout,
    которая создаёт контекст с таймаутом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить