如何使用自定义键实现包含地图的 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
- 对值进行散列处理(尽管可能会发生冲突)
我想创建一个 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
- 对值进行散列处理(尽管可能会发生冲突)