Как получить пользовательский тип go с помощью gogo/protobuf
Мой код в файле.proto в настоящее время выглядит так:
message Category {
int64 CategoryID = 1;
}
message Categories {
repeated Category cat = 1;
}
Когда я бегу protoc --gogofaster_out=. *.proto
вывод, который я получаю:
type Category struct {
CategoryID int64
}
type Categories struct {
Cat []*Category
}
Но то, что я на самом деле хочу, это:
type Category struct {
CategoryID int64
}
type Categories []*Category
Каким должен быть мой код в файле.proto, чтобы получить желаемый результат?
0 ответов
Protobuf - это, по сути, механизм сериализации структурированных данных. Это означает, что перед отправкой прото-"сообщения" оно должно быть сериализовано. Когда вы компилируете этот протокол для разных языков, он генерирует соответствующие классы (для C++/Java), структуры для Golang. В вашем случае "type Categories []*Category" - это не сообщение, а отдельный объект, который не может быть сериализован. (Здесь можно поправить). Обратитесь к руководству по языку Protobuf https://developers.google.com/protocol-buffers/docs/proto3
Если намерение здесь состоит в том, чтобы иметь массив типов категорий и сериализовать их, рекомендуется инкапсулировать его в сообщение.