簡體   English   中英

protoc-gen-go結構xxx隱藏到map [string] interface {}

[英]protoc-gen-go struct xxx covert to map[string]interface{}

.proto文件生成的文件.pb.go結構有三個附加字段和其他一些things.like這樣的:

在此處輸入圖片說明

當將此結構轉換為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"}

當我刪除這三個字段時,程序運行正常,這三個字段是自動生成的,並且我有很多結構。 我該怎么辦?謝謝!

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例程的稍作修改的版本FillMap省略XXX字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM