gRPC-Protocol语法指南 (7)

optimize_for(文件选项):可以设置为SPEED,CODE_SIZE或LITE_RUNTIME。 这会通过以下方式影响C ++和Java代码生成器(可能还有第三方生成器):
[1] SPEED(默认):协议缓冲区编译器将生成代码,用于对消息类型进行序列化,解析和执行其他常见操作。此代码已高度优化。
[2] CODE_SIZE:协议缓冲区编译器将生成最少的类,并将依赖于基于反射的共享代码来实现序列化,解析和其他各种操作。因此,生成的代码将比使用SPEED的代码小得多,但是操作会更慢。类仍将实现与在SPEED模式下完全相同的公共API。此模式在包含大量.proto文件且不需要所有文件都快速达到要求的应用程序中最有用。
[3] LITE_RUNTIME:协议缓冲区编译器将生成仅依赖于“ lite”运行时库的类(libprotobuf-lite而非libprotobuf)。精简版运行时比完整库要小得多(大约小一个数量级),但省略了某些功能,例如描述符和反射。这对于在受限平台(例如手机)上运行的应用程序特别有用。编译器仍将像在SPEED模式下一样快速生成所有方法的实现。生成的类将仅以每种语言实现MessageLite接口,该接口仅提供完整Message接口方法的子集。

option optimize_for = CODE_SIZE;

cc_enable_arenas(文件选项):启用C ++生成代码的舞台分配。

objc_class_prefix(文件选项):设置Objective-C类的前缀,该前缀附加到所有Objective-C生成的类和此.proto枚举。 没有默认值。 您应该使用Apple推荐的3-5个大写字符之间的前缀。 请注意,Apple保留所有2个字母前缀。

不推荐使用(字段选项):如果设置为true,则表示不推荐使用该字段,新代码不应使用该字段。 在大多数语言中,这没有实际效果。 在Java中,这成为@Deprecated注释。 将来,其他特定于语言的代码生成器可能会在该字段的访问器上生成弃用注释,这反过来将导致在编译尝试使用该字段的代码时发出警告。 如果该字段未被任何人使用,并且您想阻止新用户使用它,请考虑使用保留语句替换字段声明。

int32 old_field = 6 [deprecated = true]; Custom Options

协议缓冲区还允许您定义和使用自己的选项。 这是大多数人不需要的高级功能。 如果您确实需要创建自己的选项,请参阅《 Proto2语言指南》以了解详细信息。 请注意,创建自定义选项使用扩展名,扩展名仅适用于proto3中的自定义选项。

Generating Your Classes

要生成Java,Python,C ++,Go,Ruby,Objective-C或C#代码,您需要使用.proto文件中定义的消息类型,您需要在.proto上运行协议缓冲区编译器协议。 如果尚未安装编译器,请下载软件包并按照自述文件中的说明进行操作。 对于Go,您还需要为编译器安装一个特殊的代码生成器插件:您可以在GitHub上的golang / protobuf存储库中找到此代码和安装说明。

协议编译器的调用如下:

protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR --go_out=DST_DIR --ruby_out=DST_DIR --objc_out=DST_DIR --csharp_out=DST_DIR path/to/file.proto

IMPORT_PATH指定解析导入指令时在其中查找.proto文件的目录。 如果省略,则使用当前目录。 可以通过多次传递--proto_path选项来指定多个导入目录。 将按顺序搜索它们。 -I = _IMPORT_PATH_可以用作--proto_path的缩写。

您可以提供一个或多个输出指令:
--cpp_out在DST_DIR中生成C ++代码。有关更多信息,请参见C ++生成的代码参考。
--java_out在DST_DIR中生成Java代码。有关更多信息,请参见Java生成的代码参考。
--python_out在DST_DIR中生成Python代码。有关更多信息,请参见Python生成的代码参考。
--go_out在DST_DIR中生成Go代码。有关更多信息,请参见Go生成的代码参考。
--ruby_out在DST_DIR中生成Ruby代码。 Ruby生成的代码参考即将推出!
--objc_out在DST_DIR中生成Objective-C代码。有关更多信息,请参见Objective-C生成的代码参考。
--csharp_out在DST_DIR中生成C#代码。有关更多信息,请参见C#生成的代码参考。
--php_out在DST_DIR中生成PHP代码。欲了解更多便利,请参见PHP生成的代码参考。如果DST_DIR以.zip或.jar结尾,则编译器会将输出写入给定名称的单个ZIP格式存档文件。根据Java JAR规范的要求,还将为.jar输出提供清单文件。注意,如果输出存档已经存在,它将被覆盖;编译器不够 智能,无法将文件添加到现有存档中。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjwyp.html