如何解决在Protobuf中将Go结构编码为映射键的最有效方法
据我所知,协议缓冲区不允许使用消息(以及Go结构)作为键:
Key in map fields cannot be float/double,bytes or message types.
message HashCoordinate {
int32 x = 1;
int32 y = 2;
}
message State {
map<HashCoordinate,Entity> entities = 1;
}
一种解决方法是将HashCoordinate
键存储为JSON字符串:
message HashCoordinate {
int32 x = 1;
int32 y = 2;
}
message State {
map<string,Entity> entities = 1;
}
出于比较目的,这不如存储结构好。还有其他将HashCoordinates
序列化为字符串的性能更高的选项吗?
解决方法
这取决于;您如何专注于表现? (相对于可读性,使用其他语言处理原生泡沫的能力等)。
例如,我希望uint64键(example encoding)表现良好,但这会牺牲可读性。另外,您可以使用nested map,但需要两次查找。也许用您的数据对一些替代方案进行基准测试。
请注意您不要optimising prematurely-使用以上两种方法中的任何一种都会使读取/理解原型文件更加困难。在这种情况下,我的默认方法是返回一个切片(即原始文件中的repeated
),并在收到后将其转换为地图,除非有令人信服的理由将其作为地图传输。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。