The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
craftx

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

  •  
  •   craftx · May 3, 2023 · 3526 views
    This topic created in 1284 days ago, the information mentioned may be changed or developed.
    目前服务的 rpc ,都是 json rpc.
    优点自然是兼容性好、一些开源结构(比如 shopspring/decimal )都自带 json 支持。
    如果真的遇到奇葩的,还可以自定义序列化和反序列化。

    但缺点:低效。

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

    看大家有没有好的替代推荐。
    12 replies  •  2023-08-27 11:25:41 +08:00
    fumeboy
    fumeboy
    May 3, 2023
    1
    JSON with bytedance/sonic
    joesonw
    joesonw
    May 3, 2023 via iPhone
    2
    protobuf 很方便写自己的 protoc-gen 插件来生成各种自己需要的代码
    这里是一个很简单的实现作为参考,https://github.com/joesonw/hrpc
    lovelylain
    lovelylain
    May 3, 2023 via Android
    3
    json 就没有 protobuf 的
    lovelylain
    lovelylain
    May 3, 2023 via Android
    4
    json 就没有你所列的 protobuf 的缺点了吗?比如时间直接 time.Time 。json 相比 protobuf 除了低效,连 bytes 都不支持,pb 除了序列化以后没有可读性,其他方面不至于不如 json 呀。
    duke807
    duke807
    May 3, 2023 via Android
    6
    mesgpack
    duke807
    duke807
    May 3, 2023 via Android
    7
    msgpack
    wheeler
    wheeler
    May 3, 2023 via iPhone
    8
    @lovelylain #4 go 里面 time 不是默认 rfc3339 格式吗?另外 bytes 也是直接 base64 。https://pkg.go.dev/encoding/json#Marshal
    artnowben
    artnowben
    May 3, 2023
    9
    看看 brpc 能不能满足需求
    patrickyoung
    patrickyoung
    May 3, 2023 via iPhone
    10
    Gob 能用不?但是问题是,需要注意反序列化不受信任的第三方数据带来的安全问题。
    lysS
    lysS
    May 4, 2023
    11
    json 可以自定义序列化啊,struct 实现两个方法就可以了。这里很容易死循环,要定义个类型别名
    firstep
    firstep
    Aug 27, 2023
    12
    看过各个序列化的性能对比,最终选 msgpack
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   670 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 20:25 · PVG 04:25 · LAX 12:25 · JFK 15:25
    ♥ Do have faith in what you're doing.