2016-10-26 2 views
4

Я использую grpc golang для связи между клиентским и серверным приложением. Ниже приведен код для буфера протоков.Создать переменную типа Map [string] interface {} в gRPC protoc buffer golang

syntax = "proto3"; 
package Trail; 

service TrailFunc { 
    rpc HelloWorld (Request) returns (Reply) {} 
} 

// The request message containing the user's name. 
message Request { 
    map<string,string> inputVar = 1; 
} 
// The response message containing the greetings 
message Reply { 
    string outputVar = 1; 
} 

мне нужно создать поле InputVar типа карты [строка] Интерфейс {} внутри структуры данных сообщений вместо отображения [строка] строки. Как я могу это достичь? Спасибо заранее.

+0

Off руки, которая звучит как «вы не хотите». Но я думаю, что 'map ' может работать, может быть? – Vatine

ответ

2

proto3 имеет тип Any

import "google/protobuf/any.proto"; 

message ErrorStatus { 
    string message = 1; 
    repeated google.protobuf.Any details = 2; 
} 

, но если вы посмотрите на его реализацию, это просто как

message Any { 
    string type_url = 1; 
    bytes value = 2; 
} 

Вы должны определить такое сообщение самостоятельно, возможно, с помощью отражения и промежуточного типа ,

См example application

https://github.com/golang/protobuf/issues/60

0

Хотя он получает немного многословным, чтобы иметь дело с, типа «структура» в буферы протокола, вероятно, ближе к карте golang в [строка] интерфейс {}

Но подобный интерфейс {} возьмет некоторые служебные данные стиля отражения, чтобы определить, что такое фактический сохраненный тип.

, например, см комментарий здесь: https://github.com/golang/protobuf/issues/370

Смежные вопросы