我有一个用 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 回答
- 0 关注
- 75 浏览
添加回答
举报
0/150
提交
取消