Language Guide (proto3) | proto3 语言指南(十四)选项
Options - 选项
.proto
文件中的单个声明可以使用许多 选项 进行注释。选项不会更改声明的总体含义,但可能会影响在特定上下文中处理声明的方式。可用选项的完整列表在google/protobuf/descriptor.proto
中定义。
有些选项是文件级选项,这意味着它们应该写在顶级作用域中,而不是写在任何消息、枚举或服务定义中。有些选项是消息级别的选项,这意味着它们应该写在消息定义中。有些选项是字段级选项,这意味着它们应该写在字段定义中。也可以在枚举类型、枚举值、字段之一、服务类型和服务方法上编写选项;但是,目前尚无任何有用的选项可供选择。
以下是一些最常用的选项:
java_package
(文件选项):您要用于生成的Java类的包。如果在.proto
文件中没有给出显式的java_package
选项,那么默认情况下将使用proto包(使用.proto
文件中的“package”关键字指定)。然而,proto包通常不是好的Java包,因为proto包不应该以反向域名开始。如果不生成Java代码,则此选项无效。
option java_package = "com.example.foo";
java_multiple_files
(文件选项):如果为false,则只为该.proto
文件生成一个.java
文件,并且为顶级消息、服务和枚举生成的所有Java类/枚举等将嵌套在外部类中(请参见java_outer_classname
)。如果为true,则将为为顶级消息、服务和枚举生成的每个Java类/枚举等生成单独的.java
文件,并且为此.proto
文件生成的java“外部类”将不包含任何嵌套类/枚举等。这是一个默认为false的布尔选项。如果不生成Java代码,则此选项无效。
option java_multiple_files = true;
optimize_for
(文件选项):可以设置为SPEED
,CODE_SIZE
,或LITE_RUNTIME
。这将以如下方式影响C++和Java代码生成器(可能还有第三方生成器):SPEED
(默认值):协议缓冲区编译器将生成用于序列化、解析和对消息类型执行其他常见操作的代码。这段代码是高度优化的。CODE_SIZE
:协议缓冲区编译器将生成最小的类,并依赖共享的、基于反射的代码来实现序列化、解析和各种其他操作。因此,生成的代码将比使用SPEED
时小得多,但操作将更慢。类仍将实现与在SPEED
模式下完全相同的公共API。这种模式在包含大量.proto
文件的应用程序中非常有用,而且不需要所有文件都非常快。LITE_RUNTIME
:协议缓冲区编译器将生成仅依赖于lite运行时库(libprotobuf-lite
而不是libprotobuf
)的类。lite运行时比完整库要小得多(大约小一个数量级),但省略了某些特性,如描述符和反射。这对于运行在手机等受限平台上的应用程序特别有用。编译器仍然会像在速度模式下一样生成所有方法的快速实现。生成的类将只在每种语言中实现MessageLite
接口,它只提供完整message
接口的方法子集。
option optimize_for = CODE_SIZE;
cc_enable_arenas
(文件选项):为C++生成的代码启用arena allocation。objc_class_prefix
(文件选项):设置Objective-C类前缀,该前缀位于此.proto中所有Objective-C生成的类和枚举之前。没有默认值。你应该使用Apple推荐的3-5个大写字符的前缀。请注意,所有2个字母前缀都由Apple保留。- deprecated(文件选项):如果设置为
true
,则表示该字段已弃用,不应由新代码使用。在大多数语言中,这没有实际效果。在Java中,这变成了@Deprecated
注释。将来,其他特定于语言的代码生成器可能会在字段的访问器上生成弃用注释,这反过来会导致在编译试图使用该字段的代码时发出警告。如果该字段没有被任何人使用,并且您想阻止新用户使用它,请考虑用reserved
语句替换字段声明。
int32 old_field = 6 [deprecated = true];
自定义选项
协议缓冲区还允许您定义和使用自己的选项。这是大多数人不需要的高级功能。如果您确实认为需要创建自己的选项,请参阅Proto2语言指南了解详细信息。请注意,创建自定义选项会使用扩展,这些扩展只允许用于proto3
中的自定义选项。
Language Guide (proto3) | proto3 语言指南(十四)选项的更多相关文章
- Swift5 语言指南(十四) 下标
类,结构和枚举可以定义下标,下标是用于访问集合,列表或序列的成员元素的快捷方式.您可以使用下标按索引设置和检索值,而无需单独的设置和检索方法.例如,您可以访问在元素Array实例作为someArray ...
- Swift语言指南(十)--字符串与字符
原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...
- Language Guide (proto3) | proto3 语言指南(四)枚举类型
枚举类型 定义消息类型时,可能希望其中一个字段只包含预定义值列表中的一个.例如,假设您想为每个SearchRequest添加一个corpus(语料库)字段,其中语料库的值可以是UNIVERSAL.WE ...
- Swift5 语言指南(十九) 错误处理
错误处理是响应程序中的错误条件并从中恢复的过程.Swift为在运行时抛出,捕获,传播和操纵可恢复的错误提供了一流的支持. 某些操作无法保证始终完成执行或生成有用的输出.Optionals用于表示缺少值 ...
- Swift5 语言指南(十) 枚举
一个枚举定义了一个通用型的一组相关的值,使你在你的代码中的一个类型安全的方式这些值来工作. 如果您熟悉C,您将知道C枚举将相关名称分配给一组整数值.Swift中的枚举更灵活,并且不必为枚举的每个案例提 ...
- C语言——第十四、十五周作业
题目 题目一:交换最小值和最大值 1.实验代码 #include<stdio.h> int main() { ; int i , n; int a[N]; int x , y; scanf ...
- Swift5 语言指南(十八) 可选链接
可选链接是一个查询和调用当前可选的可选项的属性,方法和下标的过程nil.如果optional包含值,则属性,方法或下标调用成功; 如果是可选的nil,则返回属性,方法或下标调用nil.多个查询可以链接 ...
- Swift5 语言指南(十六) 初始化
初始化是准备要使用的类,结构或枚举的实例的过程.此过程涉及为该实例上的每个存储属性设置初始值,并执行在新实例准备好使用之前所需的任何其他设置或初始化. 您可以通过定义实现这个初始化过程初始化,这就像特 ...
- Swift5 语言指南(十五) 继承
类可以从另一个类继承方法,属性和其他特性.当一个类继承自另一个类时,继承类称为子类,它继承的类称为其超类.继承是一种基本行为,它将类与Swift中的其他类型区分开来. Swift中的类可以调用和访问属 ...
- Swift5 语言指南(十二) 属性
属性将值与特定类,结构或枚举相关联.存储的属性将常量和变量值存储为实例的一部分,而计算属性则计算(而不是存储)值.计算属性由类,结构和枚举提供.存储的属性仅由类和结构提供. 存储和计算属性通常与特定类 ...
随机推荐
- 有关CSS 定位中的盒装模型、position、z-index的学习心得
开始整体之前我需要说明两个概念: 第一个就是 一切皆为框 也就是说在HTML中的不管是是块级的还是内联的,都可以认为成块的,唯一的区别就是块的会独自占据一行 第二个文档流: 一个网页可以看作是 ...
- web.xml中配置启动时加载的servlet,load-on-starup
web.xml中配置启动时加载的servlet,load-on-starup 使用servlet来初始化配置文件数据: 在servlet的配置当中,<load-on-startup>1&l ...
- 在 CAP 中使用 AOP ( Castle.DynamicProxy )
简介 本篇文章主要介绍如何在 CAP 中集成使用 Castle.DynamicProxy,Castle DynamicProxy 是一个用于在运行时动态生成轻量级.NET代理的库.代理对象允许在不修改 ...
- 一个轻量级的.Net Core微服务快速开发的轮子
前言 Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权.集成了一系列微服务配套组件,代码简洁.易上手.学习成本低.开箱即用 ...
- C#扫盲篇(二)依赖倒置•控制反转•依赖注入•面向接口编程--满腹经纶的说
扫盲系列的文章收到了广大粉丝朋友的支持,十分感谢,你们的支持就是我最大动力. 我的扫盲系列还会继续输出,本人也是一线码农,有什么问题大家可以一起讨论.也可以私信或者留言您想要了解的知识点,我们一起进步 ...
- flume的一些使用
一.第一层采集通道的编写 1.第一层采集脚本Source的选择①Source: 数据源在日志文件中! 读取日志中的数据,可以使用以下Source ExecSource: 可以执行一个linux命令,例 ...
- 「珍贵历史资料鉴赏」CF786B 题解
写在前面 偶然翻到一篇 2019-08-07 18:58 写的未发布的题解. 给大家找点乐子玩. 正文 知识点:线段树优化建图 线段树优化建图 用于解决 类似 从 x 向区间[L,R]的 区间连边问题 ...
- LessonStrangeWords7
capacity 容量 measurement n. 度量 per 每一 analog 模拟的 continuous 连续的 one-lane 单车道 external 外部的 asynchronou ...
- windows端口占用
原文链接http://zhhll.icu/2020/04/08/windows/windows%E4%B9%8B%E7%AB%AF%E5%8F%A3%E5%8D%A0%E7%94%A8/ 1.查看当前 ...
- Flutter 基础组件:输入框和表单
前言 Material组件库中提供了输入框组件TextField和表单组件Form. 输入框TextField 接口描述 const TextField({ Key key, // 编辑框的控制器,通 ...