由 .proto 文件生成的 .pb.go 文件中的结构具有三个附加字段和一些其他内容,例如:
将此结构转换为 json 时,如果一个字段为空,则该字段不会出现在json中。现在,我知道可以使用 jsonpb.Marshaler 。
m := jsonpb.Marshaler{EmitDefaults: true}
现在,我将结构覆盖到 map [string] interface {} ,放入 InfluxDB 。我必须将结构转换为map [string] interface {}。函数 NewPoint 需要。像这样:
我在go中使用了 structs.Map(value)函数,转换后的地图具有三个附加字段,运行程序会导致错误,如下所示:
{"error":"unable to parse 'txt,severity=1 CurrentValue=\"1002\",MetricAlias=\"CPU\",XXX_sizecache=0i,XXX_unrecognized= 1552551101': missing field value"}
当我删除这三个字段时,程序运行正常,这三个字段是自动生成的,并且我有很多结构。 我该怎么办?谢谢!
答案 0 :(得分:0)
Protobuf生成器添加了一些其他字段,其名称以XXX
开头,用于优化。您无法更改protoc-gen-go
的这种行为。
问题在于您将struct
转换为map[sting]interface{}
的方式。很难弄清楚structs.Map
是哪个包的来源。似乎是从这里开始的:https://github.com/fatih/structs/blob/master/structs.go#L89-此代码使用reflect
遍历结构的所有字段并将其推送到map[sting]interface{}
。您只需要编写自己的FillMap
例程的稍作修改的版本即可省略XXX
字段。