V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
craftx
V2EX  ›  Go 编程语言

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

  •  
  •   craftx · 330 天前 · 2110 次点击
    这是一个创建于 330 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前服务的 rpc ,都是 json rpc.
    优点自然是兼容性好、一些开源结构(比如 shopspring/decimal )都自带 json 支持。
    如果真的遇到奇葩的,还可以自定义序列化和反序列化。

    但缺点:低效。

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

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