Что выведет код Middle context обновлено
Что выведет Go: поиск значений в цепочке контекстов
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import (
"context"
"fmt"
)
type key string
func main() {
ctx := context.WithValue(context.Background(), key("user"), "anna")
ctx2 := context.WithValue(ctx, key("user"), "boris")
ctx3 := context.WithValue(ctx2, key("role"), "admin")
fmt.Println(ctx3.Value(key("user")), ctx.Value(key("user")))
fmt.Println(ctx3.Value("user"), ctx.Value(key("role")))
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: boris anna, <nil> <nil>. Value ищет ключ вверх по цепочке от текущего узла, поэтому ближайшее значение "boris" затеняет "anna".
Что выведет
boris anna
<nil> <nil>
Разбор
Value ищет ключ вверх по цепочке от текущего узла, поэтому ближайшее значение "boris" затеняет "anna". Родитель не видит значения потомков. Ключ "user" типа string не равен key("user"): интерфейсы с разными типами не равны. Поэтому ключи делают своим типом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.