登录
首页 >  Golang >  Go问答

在 Protobuf 中将 Go 结构映射为键的最佳方式

来源:stackoverflow

时间:2024-03-20 19:33:29 373浏览 收藏

在 Protobuf 中,将 Go 结构映射为键通常会遇到限制,因为协议缓冲区不支持将消息(即 Go 结构)用作键。为了解决此问题,一种方法是将键存储为 JSON 字符串,但效率较低。本文探讨了其他替代方案,例如使用 uint64 密钥或嵌套映射,并强调在选择方案时需要考虑性能、可读性和兼容性等因素。

问题内容

据我了解,协议缓冲区不允许使用消息(因此 go 结构)作为键:

key in map fields cannot be float/double, bytes or message types.
message hashcoordinate {
    int32 x = 1;
    int32 y = 2;
}
message state {
    map entities = 1;
}

解决方法是将 hashcooperative 密钥存储为 json 字符串:

message hashcoordinate {
    int32 x = 1;
    int32 y = 2;
}
message State {
    map entities = 1;
}

出于比较目的,这不如存储结构那么高效。是否有其他选项比将 hashcooperatives 序列化为字符串的性能更高?


解决方案


这取决于;您对绩效的关注程度如何? (与可读性、用其他语言处理 protobuf 的能力等)。

例如,我希望 uint64 密钥 (example encoding) 表现良好,但这会牺牲可读性。或者,您可以使用 nested map,但这需要两次查找。也许可以用您的数据对一些替代方案进行基准测试。

请注意,您不是 optimising prematurely - 使用上述任一方法的缺点是更难阅读/理解 proto 文件。在这种情况下,我的默认方法是返回一个切片(原始文件中的 repeated )并在收到时将其转换为地图,除非有令人信服的理由将其作为地图传输。

今天关于《在 Protobuf 中将 Go 结构映射为键的最佳方式》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>