今天在做项目开发时,对数据进行更新操作,遇到 bug。

bug 描述如下:

  • 更新备注是,当有数据,更新成功,即使是空格依然更新成功
  • 当删除输入内容时,更新失效

跟踪发现:

  • protocol-buffer 默认空值,对字段进行了过滤处理造成

解决办法如下:

  • 采用反射,将 protocol-buffer 默认空值过滤取消,即所有未传空值进行空值展示

以下是代码实现:

func Pb2Map(pb proto.Message) (map[string]interface{}, error) {
	_buffer := bytes.Buffer{}
	jsonbMarshaller := &jsonpb.Marshaler{
		OrigName:     true,
		EnumsAsInts:  true,
		EmitDefaults: true,
	}

	jsonbMarshaller.Marshal(&_buffer, pb)
	jsonCnt := _buffer.Bytes()
	var out map[string]interface{}
	err := json.Unmarshal(jsonCnt, &out)

	return out, err
}