我有一个用 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.Name
proto
func 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
实施成功编码吗?
还有什么可能导致这种不一致的价值观对待?
慕码人8056858
相关分类