如何使用自定义键实现包含地图的 Google Protobuf

How to implement Google Protobuf containing map with custom key

我想创建一个 protobuf,其中 return 是一个包含自定义键的映射。当我尝试制作一个时,出现错误:Key in map fields cannot be float/double, bytes or message types。我想知道是否有解决方法。

我正在尝试创建以下类型的地图(作为示例):

message Name {
  string first_name = 1;
  string last_name = 2;
}

message GetNameResp {
  map<Name, string> name_info = 1;
}

那么,这里的Name可以作为地图的可能键吗?我能找到的唯一解决方案是序列化地图,然后将 return 序列化为 repeated 值。

谢谢!

映射键不能是消息类型:

https://developers.google.com/protocol-buffers/docs/proto3#maps

您必须在代码中解决这个问题。

您可以将 Name 转换为字符串:

  • 序列化 protobuf 消息
  • 编组到 JSON
  • 对值进行散列处理(尽管可能会发生冲突)