有没有哪种编码格式,高效、兼容性好、支持 go 自定义序列化和反序列化?

2023-05-03 09:15:24 +08:00
 craftx
目前服务的 rpc ,都是 json rpc.
优点自然是兼容性好、一些开源结构(比如 shopspring/decimal )都自带 json 支持。
如果真的遇到奇葩的,还可以自定义序列化和反序列化。

但缺点:低效。

找替换的话,首先想到的是 protobuf 。高效是高效,无奈使用不便,兼容性是个大问题。比如时间,就不能直接 time.Time 。

看大家有没有好的替代推荐。
2426 次点击
所在节点    Go 编程语言
12 条回复
fumeboy
2023-05-03 09:20:05 +08:00
JSON with bytedance/sonic
joesonw
2023-05-03 09:39:09 +08:00
protobuf 很方便写自己的 protoc-gen 插件来生成各种自己需要的代码
这里是一个很简单的实现作为参考,https://github.com/joesonw/hrpc
lovelylain
2023-05-03 09:41:22 +08:00
json 就没有 protobuf 的
lovelylain
2023-05-03 09:46:02 +08:00
json 就没有你所列的 protobuf 的缺点了吗?比如时间直接 time.Time 。json 相比 protobuf 除了低效,连 bytes 都不支持,pb 除了序列化以后没有可读性,其他方面不至于不如 json 呀。
hahadaxigua834
2023-05-03 10:07:17 +08:00
duke807
2023-05-03 11:04:40 +08:00
mesgpack
duke807
2023-05-03 11:09:41 +08:00
msgpack
wheeler
2023-05-03 11:28:54 +08:00
@lovelylain #4 go 里面 time 不是默认 rfc3339 格式吗?另外 bytes 也是直接 base64 。https://pkg.go.dev/encoding/json#Marshal
artnowben
2023-05-03 12:14:32 +08:00
看看 brpc 能不能满足需求
patrickyoung
2023-05-03 20:50:02 +08:00
Gob 能用不?但是问题是,需要注意反序列化不受信任的第三方数据带来的安全问题。
lysS
2023-05-04 16:37:46 +08:00
json 可以自定义序列化啊,struct 实现两个方法就可以了。这里很容易死循环,要定义个类型别名
firstep
2023-08-27 11:25:41 +08:00
看过各个序列化的性能对比,最终选 msgpack

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/936955

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX