Protobuf3 使用其他消息类型

您可以使用其他消息类型作为字段类型。例如,假设您希望在每个SearchResponse消息中包含Result消息,为此,您可以在.proto中定义结果消息类型,然后在SearchResponse中指定Result类型字段:

message SearchResponse {
  repeated Result results = 1;
} message Result {
  string url = 1;
  string title = 2;
  repeated string snippets = 3;
}

导入定义

在上面的例子中,Result 消息类型和SearchResponse定义在同一个文件中——如果你想用作字段类型的消息类型已经在另一个.proto 文件中定义了呢?

您可以通过导入其他.proto文件来使用文件中的定义的类型。 您可以在文件的顶部添加一条import语句:

import "myproject/other_protos.proto";

默认情况下,您只能使用直接导入的 .proto文件定义。然而,有时你可能需要移动一个 .proto文件到一个新的位置,但不想为此更新了所有调用它的.proto文件,现在你可以在文件原始位置放置一个仿造的 .proto文件,使用import public将所有导入转发到新位置。任何包含import public语句的proto的人都可以临时依赖import public依赖。例如:

// new.proto
// All definitions are moved here
// old.proto
// This is the proto that all clients are importing.
import public "new.proto";
import "other.proto";
// client.proto
import "old.proto";
// You use definitions from old.proto and new.proto, but not other.proto

协议编译器使用-I/--proto_path标志在协议编译器命令行指定的一组目录中搜索导入的文件。如果没有给出标志,它会在调用编译器的目录中查找。通常,您应该将--proto_path标志设置为项目的根目录,并对所有导入使用完全限定的名称。

使用proto2消息类型

可以导入proto2消息类型并在proto3消息中使用它们,反之亦然。但是,proto2枚举不能直接在proto3语法中使用(如果导入的proto 2消息使用它们也没关系)。

最新文章

  1. 数据存储_SQLite (2)
  2. shell中$0,$?,$!等变量意义
  3. 标题编辑 AndroidTagGroup
  4. [日常训练]FJ省夏令营day1
  5. D/A转换器实验
  6. 收不到Win10正式版预订通知?一个批处理搞定
  7. 一个现代化的JSON库Moshi针对Android和Java
  8. Hibernate中的多对多关系详解(3)​
  9. Android中两种设置全屏或者无标题的方法
  10. [转]标准C++字符串string以及MFC6.0字符串CString的tokenize和split函数
  11. redhat 安装virtualbox
  12. alex python of day1
  13. sql中的IFNULL函数的应用
  14. Linux(CentOS 7)环境下安装MySQL
  15. 查询拼接SQL语句,多条件模糊查询
  16. 【转载】JAVA基础复习与总结<三> Object类的常用方法
  17. 不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。
  18. ES6中的proxy
  19. day10-列表生成式
  20. springboot学习过程笔记

热门文章

  1. Apache软件基金会核心项目Tomcat的那些事
  2. linux命令及相关配置
  3. 15 Filter过滤器和Listener监听器
  4. 使用ImagesPipeline时候报错为:ModuleNotFoundError: No module named 'scrapy.contrib'
  5. 精确选择识别png图片有像素的区域
  6. java 获取手机归属地,引起net.UnknownHostException错误
  7. C#中Unity对象的注册方式与生命周期解析
  8. Eclipse开发环境(一):下载和安装
  9. mysql的安装,启动,和基础配置 -----windows版本
  10. kubernetes 配置网络插件 flannel