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

发布于 1周前 作者 sinazl 来自 Go语言

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

但缺点:低效。

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

看大家有没有好的替代推荐。
Golang Go语言中有没有哪种编码格式,高效、兼容性好、支持自定义序列化和反序列化?

13 回复

JSON with bytedance/sonic

更多关于Golang Go语言中有没有哪种编码格式,高效、兼容性好、支持自定义序列化和反序列化?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


protobuf 很方便写自己的 protoc-gen 插件来生成各种自己需要的代码
这里是一个很简单的实现作为参考,https://github.com/joesonw/hrpc

json 就没有 protobuf 的

json 就没有你所列的 protobuf 的缺点了吗?比如时间直接 time.Time 。json 相比 protobuf 除了低效,连 bytes 都不支持,pb 除了序列化以后没有可读性,其他方面不至于不如 json 呀。

msgpack

#4 go 里面 time 不是默认 rfc3339 格式吗?另外 bytes 也是直接 base64 。https://pkg.go.dev/encoding/json#Marshal

看看 brpc 能不能满足需求

Gob 能用不?但是问题是,需要注意反序列化不受信任的第三方数据带来的安全问题。

json 可以自定义序列化啊,struct 实现两个方法就可以了。这里很容易死循环,要定义个类型别名

看过各个序列化的性能对比,最终选 msgpack

在Golang(Go语言)中,UTF-8编码具备高效性、良好的兼容性,是Go语言的默认编码格式。不过,关于支持自定义序列化和反序列化的编码格式,更推荐考虑以下几种方法:

  1. JSON:Go语言内置了encoding/json标准库,支持高效的JSON序列化和反序列化。开发者可以通过定义结构体,并使用json.Marshal()json.Unmarshal()函数来实现自定义对象的序列化和反序列化。
  2. XML:与JSON类似,Go语言也提供了encoding/xml标准库来处理XML格式的序列化和反序列化。
  3. Gob:对于需要在Go语言程序间传输数据的场景,可以使用encoding/gob包。它支持自定义类型的序列化和反序列化,但需要注意的是,Gob编码是Go语言特有的,不适用于与其他编程语言的互操作。
  4. Protocol Buffers(protobuf):Go语言支持使用Protocol Buffers进行高效的序列化和反序列化。这是一种与语言无关、平台无关的序列化数据的方法,它需要一个.proto文件来定义数据结构,然后使用protoc编译器生成对应语言的代码。

综上所述,虽然UTF-8编码在Go语言中非常高效和兼容,但为了实现自定义对象的序列化和反序列化,更推荐选择JSON、XML、Gob或Protocol Buffers等方法。

回到顶部