扩展不同数量的字段时,如何用 proto3 any 替换 proto2 扩展?

how to replace proto2 extension with proto3 any when extend different number of field?

我正在尝试学习 proto3,有一些关于 any 的问题。

我用extension比较多,如果我的原型是这样的:

message base {
    extensions 1 to 100;
}

// a.proto
extend base {
   optional int32 a = 1;
   optional int32 b = 2;
}

// b.proto
extend base {
   optional string c = 1;
   optional string d = 2;
   optional string e = 3;
   optional string f = 4;
}

那么如何用 any 替换这些扩展名呢?我应该写成这样吗

import google/protobuf/any.proto
message base {
    any a = 1;
    any b = 2;
    any c = 3;
    any d = 4;
}

?

可能扩展了这么多 proto base.proto,我无法确定这些 proto 的最大扩展数。那我怎样才能用任何替换这些扩展?

如果我要在留言库里写1到100中的任意一个……哎呀,那也太惨了吧!

您通常会像这样构造它:

message base {
    any submsg = 1;
}

// a.proto
message submsg_a {
   optional int32 a = 1;
   optional int32 b = 2;
}

// b.proto
message submsg_b {
   optional string c = 1;
   optional string d = 2;
   optional string e = 3;
   optional string f = 4;
}

然后在任意字段中输入 submsg_asubmsg_b