web-dev-qa-db-ja.com

gRPCプロトコルバッファgolangにMap [string] interface {}型の変数を作成します

クライアントとサーバーアプリケーション間の通信にgrpc golangを使用しています。以下はprotocバッファのコードです。

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;
}

Map [string] stringの代わりに、タイプmap [string] interface {}のフィールドinputVarをメッセージデータ構造内に作成する必要があります。どうすれば達成できますか?前もって感謝します。

10
Radhika.S

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;
}

おそらくリフレクションと中間タイプを使用して、このようなメッセージを自分で定義する必要があります。

サンプルアプリケーション を参照

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

15
Marcel Novy

少し冗長になりますが、プロトコルバッファの「構造体」タイプは、おそらくgolangのmap [string] interface {}に近いでしょう。

しかし、インターフェイスのように{}は、実際に格納されているタイプが何であるかを決定するために、リフレクションスタイルのオーバーヘッドを取ります。

たとえば、ここのコメントを参照してください: https://github.com/golang/protobuf/issues/37

0
ptone