今天在做项目开发时,对数据进行更新操作,遇到 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
}