proto3字段值为空时被忽略问题

问题

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中的数据赋值过来就好了

其它

https://stackoverflow.com/questions/34716238/golang-protobuf-remove-omitempty-tag-from-generated-json-tags

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

你可能感兴趣的:(Golang)