Using Other Message Types - 使用其他消息类型

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

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

导入定义

请注意,此功能在Java中不可用。

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

通过导入其他.proto文件,可以使用这些文件中的定义。要导入另一个.proto的定义,请在文件顶部添加一个import语句:

import "myproject/other_protos.proto";

默认情况下,只能使用直接导入的.proto文件中的定义。但是,有时可能需要将.proto文件移动到新位置。不用直接移动.proto文件并在一次更改中更新所有import调用,现在可以在旧位置放置一个伪.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语法中直接使用(如果导入的proto2消息可以使用他们)。

原文:https://www.cnblogs.com/itheo/p/14273175.html

作者:Theo·Chan

版权:本文版权归作者和博客园共有

转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接,否则必究法律责任

最新文章

  1. C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
  2. .NET中RabbitMQ的使用
  3. [BZOJ1691][Usaco2007 Dec]挑剔的美食家
  4. Union函数
  5. [Architecture Design] 累进式Domain Layer
  6. RMAN-03009 ORA-19504 ORA-27038
  7. JavaWeb学习-Tomcat
  8. jQuery Easing动画效果扩展(转)
  9. 用JSP实现的商城购物车模块
  10. org.springframework.expression.spel.SpelEvaluationException: EL1011E: Method call: Attempted to call method test() on null context object
  11. chrony时间同步 服务端 客户端 安装配置
  12. shell编程学习笔记(三):Shell中局部变量的使用
  13. 细解javascript中的this关键字
  14. s3存储桶:s3可扩展的云存储
  15. ERROR 1526 (HY000): Table has no partition for value xxx
  16. 基于spring的web项目启动时预加载数据到ServletContext
  17. Ubuntu14.04安装redis-server
  18. angular初体验
  19. [POJ] Bode Plot
  20. setInterval 与 clearInterval详解

热门文章

  1. Spring IOC 笔记
  2. ESXi 中重新启动管理代理
  3. 论JAVA实现MYSQL 行级锁(分布式锁实现方案一)
  4. CAP理论和BASE理论及数据库的ACID中关于一致性及不同点的思考
  5. 关于git的一些零碎知识
  6. Spring Cloud Hystrix原理篇(十一)
  7. canvas--总结一
  8. golang语法笔记
  9. JavaScript AMD模块化规范
  10. 三、hadoop、yarn安装配置