微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Protobuf中将Go结构编码为映射键的最有效方法

如何解决在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 举报,一经查实,本站将立刻删除。