为了账号安全,请及时绑定邮箱和手机立即绑定

一致的跨平台 Proto3 序列化/反序列化

一致的跨平台 Proto3 序列化/反序列化

Go
慕码人2483693 2023-01-03 14:20:58
我有一个用 proto3 定义的基于 golang 的 GRPC服务syntax = "proto3";对于单个 bool 字段的简单响应,如果值为false整个消息,则将其序列化为空(零长度)数据有效负载。(正如我怀疑的那样,将false其视为默认值)同时,根据完全相同的.proto定义构建的节点的 GRPC 客户端将值解释为undefined. (虽然true一个非常一致)调试服务器构建响应的方式data, err := encode(s.getCodec(stream.ContentSubtype()), msg)我注意到,stream.ContentSubtype()返回一个空字符串,以便在其中s.getCodec回落到. 它导致在这里进一步编码一些东西encoding/proto.Nameprotofunc marshalAppend(buf []byte, m Message, deterministic bool) ([]byte, error) {    if m == nil {        return nil, ErrNil    }    mi := MessageV2(m)    nbuf, err := protoV2.MarshalOptions{        Deterministic: deterministic,        AllowPartial:  true,    }.MarshalAppend(buf, mi)这看起来像是真正protoV2的实施。所以我不知道这里真正正确的问题是什么应该stream.ContentSubtype()在通信级别上以某种方式控制以及谁负责(客户端/服务器)在根据定义生成客户端/服务器源代码时是否应遵循任何其他控制步骤/操作.proto。它不会.proto自我概括元数据以输出一致的来源吗?/Cloudproto3真的应该通过protoV2实施成功编码吗?还有什么可能导致这种不一致的价值观对待?
查看完整描述

1 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

事实证明,这与配置错误无关,而是具体实施的问题。

六天前,它已在porto-gen-ts v0.8.5 中修复

感谢@Brits 的查找


查看完整回答
反对 回复 2023-01-03
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信