首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有一个或一个聚合的公共proto3字段

具有一个或一个聚合的公共proto3字段
EN

Stack Overflow用户
提问于 2019-03-15 16:00:19
回答 1查看 1.5K关注 0票数 2

我必须为一个对象生成一个proto类,它将有大约12个变体。所有12个变体共有四个相同的字段,然后有特定的字段。在大多数情况下,将有更多的非特定字段,而不是公共字段

我想知道什么是实现这一目标的最有效的方式。

第一个选项:在公共proto类中定义公共字段,然后在所有特定类型中声明此类型的字段:

代码语言:javascript
复制
message CommonFields {
    // common_field1
    // ... common_fieldN
}

message SpecificType1 {
    CommonFields common = 1;
    // specific fields...
}

还是最好先定义一个包含字段的顶级proto,然后再定义一个字段,该字段可以引用包含特定字段的另一个类型:

代码语言:javascript
复制
message BaseType {
    // common_field_1
    // ... common_field_N
    oneof specific_fields {
        SpecificTypeFields1 type1_fields = N;
        SpecificTypeFields2 type1_fields = N+1;
    }
}

message SpecificTypeFields1 {
    // specific fields...
}

message SpecificTypeFields2 {
    // specific fields...
}

我对表演和惯例特别感兴趣。或者,如果有更典型的方法,例如只重复公共字段。请记住,虽然我的原型将只有4个公共字段,而且通常是3-8个特定字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-16 18:40:51

根据protobuf库的不同,对子消息的编码通常会有一些性能损失。对于大多数图书馆来说,比如Google自己的protobuf库,差别很小。使用任何一个选项,您最终会对每个消息编码一个子消息,从而进一步减少影响。

我见过两种常用的格式。如果解码器端已经知道消息类型(例如rpc方法名),聚合通常更容易实现,因为它不需要单独检查类型之一。

但是,如果不知道消息类型,那么其中一个方法更好,因为它允许很容易地检测该类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55186466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档