猿问

protobuf3的坑

问题描述

protobuf由2升到3之后有个很烦人的坑:

当我返回的值是默认值时,protobuf会自动帮我忽略这个字段

相关代码

message UserInfo{    bool IsAuth = 1;    string Name = 2;
}

如果IsAuth是false的时候返回的就是{"Name":"xxxx"}
如果IsAuth是true时,返回的是{"IsAuth":true,"Name":"xxxxx"}

类似的问题还有很多int32=0,string=""的时候都会忽略字段

问题来了

我们跟前端的交互用的是jsonrpc,这个丢失的字段让前端处理起来不是很友好,不知道有没有什么办法解决这种问题?


哈士奇WWW
浏览 1260回答 1
1回答

喵喵时光机

有更好的解决办法的。proto生成的文件还是最好不要去修改它,存在即为合理。可以去看看一下这个。var pbMarshaler jsonpb.Marshalerfunc init() {     pbMarshaler = jsonpb.Marshaler{        EmitDefaults: true,        OrigName:     true,        EnumsAsInts:  true,     }}有Marshal方法 可以把pb对象读到buffer,剩下的就是 buffer.Bytes()了。这种方式很方便的,建议使用。
随时随地看视频慕课网APP

相关分类

Html5
我要回答