Встраивание сообщения в proto
В protobuf message можно организовать встраивание, как это в структурах гошки сделано?
Например:
type MyStruct struct {
A int
B int
}
type MyStruct2 struct {
MyStruct
C int
}
Ответы (1 шт):
Нет, нельзя. Давайте посмотрим на документацию
Don't go looking for facilities similar to class inheritance, though – protocol buffers don't do that
Вы можете рассмотреть один плохой прием, похожий на наследование
message Bar {
int32 A = 1;
}
message Foo {
int32 A = 1;
int32 B = 2;
int32 C = 2;
}
Эти два типа совместимы, потому что Bar является подмножеством Foo. Это означает, что если у тебя есть сообщение одного типа, то ты можешь декодировать его в другой тип. Если попытаешься декодировать Bar в Foo, то поля B и C будут нулевые(значение по умолчанию). Если попробуешь декодирвоать Foo в Bar, то поля будут игнорированы, точно также, как со временем добавляются новые поля в структуру.
Однако, минусов этого подхода тоже есть:
- при добавлении одного поля нужно добавить ее во все классы тоже.
- чтобы конвертирвоать один тип в другой нельзя просто взять и катсить, ты должен сериализовать их.