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

Golang 专栏收录该内容
1 篇文章 0 订阅

问题

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

  • 2
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值