1 回答

TA贡献1829条经验 获得超7个赞
在确保您在 Python 字段中设置的字符串不包含不可见字符后,在 Python 客户端中导入的生成代码与 Go 服务器导入的代码中可能存在版本不匹配。version
特别是,如果两个版本实际上都有一个字段,但Go代码以某种方式无法“识别”它,则可能是由字段标记编号不匹配引起的。version
您显示的字节有效负载(hexa,base64)确实在proto字段中发送带有标签号的字符串(我怎么知道0a 03 61 77 73 12 0c 37 33 31 30 35 38 39 35 30 32 35 37CgNhd3MSDDczMTA1ODk1MDI1Nw==aws1)
因此,让我们考虑一个人为的示例,Python客户端中使用的原始架构可能是GetAccountRequest
message GetAccountRequest {
string version = 1; // field tag number 1
}
Go服务器中使用的那个可能是:
message GetAccountRequest {
string version = 3; // field tag number 3
}
在这种情况下,您将在网络上看到具有版本字段的消息,但是在根据具有不同标记号的 Go 结构反序列化它时,它最终将为空。客户端使用 标记发送它,服务器期望它带有 标记 。13
您可以通过检查 Go 结构来验证此假设。它应如下所示:GetAccountRequest
type GetAccountRequest struct {
// unexported fields
// other fields, in order
Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
}
反引号之间的部分是结构标记,其中 是标记号。`3
我不知道Python中的gRPC代码是什么样的,但你应该能够以某种方式比较标签号。如果它们确实不同,请确保使用生成的具有相同标记号的结构更新客户端或服务器代码。
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报