Как получить пользовательский тип 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

Если намерение здесь состоит в том, чтобы иметь массив типов категорий и сериализовать их, рекомендуется инкапсулировать его в сообщение.

Другие вопросы по тегам