@NubasLol

Почему не работает context?

Всегда nil выводит

func test(r *http.Request) error {
	ctx := (*r).Context()
	ctx = context.WithValue(ctx, "test", 111)
	r = (*r).WithContext(ctx)

	return nil
}

func (c Controller) Index(w http.ResponseWriter, r *http.Request) {
	fmt.Println(r.Context().Value("test"))

	_ = test(r)

	fmt.Println(r.Context().Value("test"))

	_ = test(r)
}
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
@Bynov
r = (*r).WithContext(ctx)
Здесь возвращается копия Request, которая никак не прокидывается дальше. В нем находится Ваш контекст с ключом "test".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Зачем вы разименовываете ссылки (*r). Методы в пакетах net/http и context определены на указателях, так их и следует использовать. Попробуйте просто
func test(r *http.Request) error {
  ctx := r.Context() //здесь
  ctx = context.WithValue(ctx, "test", 111)
  r = r.WithContext(ctx) //и здесь

  return nil
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы