Метод context.Context.Value
Метод Value интерфейса context.Context позволяет
извлечь значение, сохраненное в контексте по указанному ключу.
Он принимает один параметр — ключ типа any (пустой интерфейс),
а возвращает значение типа any, либо nil, если ключ
не найден. Метод выполняет поиск по всей цепочке родительских контекстов,
начиная с текущего.
Синтаксис
val := ctx.Value(key)
Пример
Давайте создадим контекст с помощью функции context.WithValue
и извлечем значение по ключу:
package main
import (
"context"
"fmt"
)
func main() {
type keyType string
const userKey keyType = "user"
ctx := context.WithValue(context.Background(), userKey, "JohnDoe")
res := ctx.Value(userKey)
fmt.Println(res)
}
Результат выполнения кода:
"JohnDoe"
Пример
Если ключ отсутствует в контексте, метод возвращает nil:
package main
import (
"context"
"fmt"
)
func main() {
type keyType string
const userKey keyType = "user"
ctx := context.Background()
res := ctx.Value(userKey)
fmt.Println(res)
}
Результат выполнения кода:
<nil>
Пример
Метод работает с цепочкой контекстов, проверяя каждого родителя:
package main
import (
"context"
"fmt"
)
func main() {
type keyType string
const requestKey keyType = "requestID"
parent := context.WithValue(context.Background(), requestKey, "12345")
child := context.WithValue(parent, "extra", "value")
res := child.Value(requestKey)
fmt.Println(res)
}
Результат выполнения кода:
"12345"
Смотрите также
-
интерфейс
context.Context,
предоставляющий методы для работы с контекстом -
функцию
context.WithValue,
которая создает контекст с новым значением -
функцию
context.Background,
которая возвращает пустой корневой контекст -
метод
context.Context.Done,
который возвращает канал для отслеживания отмены контекста