我正在创建一个返回地图列表的 gRPC 响应。这是我想象的结构:
message GetSettingsResponse {
repeated map<string, string> settings = 1;
}
但是,不支持重复地图,我必须将地图嵌套在单独的消息中才能使其正常工作:
message GetSettingsResponse {
repeated Setting settings = 1;
}
message Setting {
map<string, string> setting = 1;
}
这可行,但它迫使我们在客户端和服务器上编写一些令人困惑的代码。有没有办法避免这种解决方案并更接近我想要的结构?
不,基本上。你所拥有的是你在 protobuf 中能做的最接近的事情。
我遇到了类似的问题,我想要一条与 Java 中的
List<Map<String,Object>>
相对应的消息。
我通过像这样定义消息解决了我的问题:
import "google/protobuf/struct.proto";
message MyMessage {
repeated google.protobuf.Struct mapList = 1;
}
希望能有所帮助。