Search code examples
gogrpcprotoc

Create variable of type Map[string]interface{} in gRPC protoc buffer golang


I'm using grpc golang to communicate between client and server application. Below is the code for protoc buffer.

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

I need to create a field inputVar of type map[string]interface{} inside message data structure instead of map[string]string. How can I achieve it? Thanks in advance.


Solution

  • proto3 has type Any

    import "google/protobuf/any.proto";
    
    message ErrorStatus {
      string message = 1;
      repeated google.protobuf.Any details = 2;
    }
    

    but if you look at its implementation, it is simply as

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

    You have to define such a message yourself by possibly using reflection and an intermediate type.

    See example application

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