我们如何在protobuf消息中放置变体消息(少数消息类型之一)?

 范婷柏 发布于 2023-02-06 09:05

我们如何在protobuf消息中放置变体消息(少数消息类型之一)?

message typeA {
    ....
}

message typeB {
    ....
}

message typeC {
    [typeB|typeA] payload;
}

Kenton Varda.. 26

你需要这样做:

message TypeC {
  optional TypeA a = 1;
  optional TypeB b = 2;
}

如果有很多变体,您可能还需要添加标记字段,这样就不必检查has_*()每个变体.

这在Protobuf文档中有所介绍:https: //developers.google.com/protocol-buffers/docs/techniques#union

PS.Protobufs的这个缺失功能​​在Cap'n Proto中得到修复,Cap'n Proto是同一作者(我)的新序列化系统:Cap'n Proto 为此目的实现了"联合".在离开Goog​​le之前,我还在Protobufs中实现了工会,但在我离开之前没有设法将我的更改合并到主线.抱歉.:(

编辑:看起来Protobuf团队最终合并了我的更改并发布了2.6.0版本.:)见的oneof声明.

2 个回答
  • 你需要这样做:

    message TypeC {
      optional TypeA a = 1;
      optional TypeB b = 2;
    }
    

    如果有很多变体,您可能还需要添加标记字段,这样就不必检查has_*()每个变体.

    这在Protobuf文档中有所介绍:https: //developers.google.com/protocol-buffers/docs/techniques#union

    PS.Protobufs的这个缺失功能​​在Cap'n Proto中得到修复,Cap'n Proto是同一作者(我)的新序列化系统:Cap'n Proto 为此目的实现了"联合".在离开Goog​​le之前,我还在Protobufs中实现了工会,但在我离开之前没有设法将我的更改合并到主线.抱歉.:(

    编辑:看起来Protobuf团队最终合并了我的更改并发布了2.6.0版本.:)见的oneof声明.

    2023-02-06 09:09 回答
  • 查看oneof2.6版中的新功能:https://developers.google.com/protocol-buffers/docs/reference/java-generated#oneof

    你现在可以这样做:

    message TypeC {
        oneof oneof_name {
            TypeA a = 1;
            TypeB b = 2;
        }
    }
    

    相同的字段oneof将共享内存,并且只能同时设置一个字段.

    2023-02-06 09:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有