Я следую за this учебным пособием и получил часть для сериализации/маршалинга Go структурирует в буфер протокола. У моей структуры есть карта, и я не могу найти никакой документации о том, как обрабатывать маршалинг карты.Как сериализовать карту Go в protobuff
В дальнейшем я хочу сериализации Fields map[string]string
:
Перейти структура:
type Note struct {
ID NoteID
Fields map[string]string
}
Protobuf схема:
package internal;
message Note {
optional int64 ID = 1;
optional map<string, string> Fields = 2;
}
Go маршалом:
func MarshalNote(n *remember.Note) ([]byte, error) {
return proto.Marshal(&Note{
ID: proto.Int64(int64(n.ID))
Fields: proto.???
})
}
Я понятия не имею, что делать для последней строки, и что-либо, что я ищу для переговоров о сопоставлении поля с протобуфом, а не о сопоставлении карты с протобуфом.
Хотя я склонен согласиться с Яндри здесь, что я также позволю прото создавать для меня заглушки Go, а не пытаться сделать это вручную (это одна большая точка для это) Мне также было бы интересно сделать это вручную. В конце концов, код должен быть там, поскольку его использует автоматическое поколение, возможно, на основе отражения? Я думаю, что это время Звездных войн ... используйте источник :) –
есть пример здесь https://jacobmartins.com/2016/05/24/practical-golang-using-protobuffs/ вы можете проверить сгенерированный код –
Для карты сгенерированные теги выглядят так: 'protobuf:" bytes, 1, rep, name = children "json:" children, omitempty "protobuf_key:" bytes, 1, opt, name = key "protobuf_val:" bytes, 2, opt, name = value "'. –