Нельзя использовать строки как ключи, это рано или поздно приведёт к конфликтам по названиям.
При проверке ключа на соответствие библиотека context сравнивает значение и тип ключа.
Ключ не должен быть простого типа, типа string, int и т.д.
Нужно создавать отдельный тип для ключа.
Такой подход позволит вам иметь в контексте несколько значений с одинаковым ключём, но разного типа.
Вот пример как правильно сделать:
type contextKey uint
const (
UserIDContextKey contextKey = 1
)
...
ctx := r.Context()
ctx = context.WithValue(ctx, UserIDContextKey, tk.UserID)