问题
message GetRes {
bool is_abc = 1;
}
当 is_abc 值为false时,直接输出response无法显示 is_abc 这个字段。在编译出来的pb.go(我用的go语言)文件中可以看到这个字段后面带有 omitempty 属性,也就是空值被忽略。
直接修改pb.go文件不友好。
解决办法
在代码中也写一个与proto中一样的数据结构,比如:
type Resp struct {
IsAbc bool `json:"is_abc"`
}
把proto中的数据赋值过来就好了
其它
func (h *infoHandler) Info(ctx echo.Context) (interface{}, error) {
ctx.Response().Header().Set("Content-Type", "application/json; charset=utf-8")
m := jsonpb.Marshaler{EmitDefaults: true}
m.Marshal(ctx.Response().Writer, resp)
}
由于我用的echo框架,这里一定要返回一个Response,这样造成返回了两个数据 --> 两个json数据连一起了。。
还有用 oneof 关键字定义proto的,然而赋值的时候不知道怎么搞。。。
https://stackoverflow.com/questions/42622015/how-to-define-an-optional-field-in-protobuf-3
https://zhuanlan.zhihu.com/p/46603988