protoc-gen-go struct xxx скрыта для отображения интерфейса [string] {}
Структура в файле .pb.go, сгенерированная файлом .proto, имеет три дополнительных поля и некоторые другие вещи, например:
При преобразовании этойструктуры вjson, если одно поле пусто, поле не будет отображаться в json. Теперь я знаю, что это можно сделать с помощьюjsonpb.Marshaler.
m := jsonpb.Marshaler{EmitDefaults: true}
Теперь я покрываюstruct дляmap [string] interface {},поместив ее вInfluxDB. Я должен преобразовать структуру в map[string]interface{}. ФункцияNewPoint нужна. как это:
Вgo я используюфункцию structs.Map (значение). Преобразованная карта имеет три дополнительных поля, и запуск программы вызывает ошибки ,, например:
{"error":"unable to parse 'txt,severity=1 CurrentValue=\"1002\",MetricAlias=\"CPU\",XXX_sizecache=0i,XXX_unrecognized= 1552551101': missing field value"}
Когда я удаляю эти три поля, программа запускается нормально. Эти три поля генерируются автоматически, и у меня много структур. Что мне делать? Спасибо!
1 ответ
Генератор 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
поля.