2017-02-16 39 views
0

Я работаю с конкретными с , обрабатывая запросы GRPC. Я пытаюсь передать мета из моего запроса GRPC в контекст, основанный на этом примере кода: https://github.com/go-kit/kit/blob/master/auth/jwt/transport.go#L47.Ошибки при передаче метаданных в контексте в golang

(только в случае, contextKey объяснение можно назвать здесь: https://medium.com/@matryer/context-keys-in-go-5312346a868d#.vn10llkse):

Ниже мой код:

type contextKey string 

func (c contextKey) String() string { 
    return string(c) 
} 

var Headers := metadata.New(map[string]string{"auth":"", "abc": "", "xyz" : ""}) 

func ToGRPCContext() grpctransport.RequestFunc { 
    return func(ctx context.Context, md *metadata.MD) context.Context { 
     for _, header := range Headers { 
      val, ok := (*md)[header] 
      if !ok { 
       return ctx 
      } 
      if len(val) > 0 { 
       ctx = context.WithValue(ctx, contextKey(header), val) 
      } 
     } 
     return ctx 
    } 

} 

Я пытаюсь читать поля метаданных (заголовки) и передать его контекст.

Я получаю следующие ошибки. cannot use header (type []string) as type string in map index и cannot convert header (type []string) to type contextKey. Я исправил вышеуказанные ошибки, обратившись к индексу и сделав что-то вроде этого val, ok := (*md)[header[0]]. Однако я хочу передать все элементы карты в контекст.

Любые предложения по решению этой проблемы?

+0

Если заголовок имеет несколько значений, как сделать вы хотите передать их? Если вы хотите добавить их отдельно, просто используйте цикл for. – JimB

ответ

2

Я думаю, что вы хотите использовать имя заголовка в качестве ключа контекста:

for name, header := range Headers { 
    val := r.Header.Get(header) 
    if len(val) > 0 { 
    ctx = context.WithValue(ctx, contextKey(name), val) 
    } 
} 

В качестве альтернативы, хранить заголовки как одно значение:

ctx = context.WithValue(ctx, contextKey("headers"), Headers) 
+0

CeriseLimon: Есть ли у вас предложения по чтению метаданных для запросов GRPC на основе этого: https://github.com/go-kit/kit/blob/master/auth/jwt/transport.go#L47? – Sanket