0

我正在尝试学习 proto3,并对any.

我经常使用扩展,如果我的原型是这样的:

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;
}

?

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

如果我在消息库中必须写1到100之间的任何一个……哦,那太可怕了!</p>

4

1 回答 1

0

您通常会像这样构造它:

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放在任何字段中。

于 2019-05-28T09:16:28.507 回答