1

.proto文件生成的.pb.go文件中的struct有三个额外的字段和一些其他的东西。像这样:

在此处输入图像描述

将此struct转换为json时,如果一个字段为空,则该字段不会出现在 json 中。现在我知道可以使用jsonpb.Marshaler来完成。

m := jsonpb.Marshaler{EmitDefaults: true}

现在,我将struct转换为map[string]interface{},将其放入 InfluxDB。我必须将 struct 转换为 map[string]interface{}。NewPoint需要的函数。像这样: 在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

我在 go 中使用了 structs.Map(value)函数,转换后的 map 多了三个字段,运行程序会报错,像这样:

{"error":"unable to parse 'txt,severity=1 CurrentValue=\"1002\",MetricAlias=\"CPU\",XXX_sizecache=0i,XXX_unrecognized= 1552551101': missing field value"}

当我删除这三个字段时,程序运行正常。这三个字段是自动生成的,我有很多结构。我该怎么办?谢谢!

4

1 回答 1

0

Protobuf 生成器添加了一些额外的字段,其名称以XXX用于优化的开头。您无法更改protoc-gen-go.

问题在于您转换structmap[sting]interface{}. 很难弄清楚究竟structs.Map来自哪个包。似乎从这里开始:https ://github.com/fatih/structs/blob/master/structs.go#L89 - 此代码用于reflect遍历结构的所有字段并将它们推送到map[sting]interface{}. 您只需要编写自己的稍作修改的例程版本,FillMap该例程将省略XXX字段。

于 2019-03-22T11:02:21.310 回答