问题描述
我试图在文档中找到答案,但是找不到。 我是gRPC和proto文件的新手,也许这是一个非常基本的问题,对此感到抱歉。
我在同一目录级别有两个文件
- mainProto.proto
- importedProto.proto
主要原型包括选项
option csharp_namespace = "business.products.accounts";
option go_package = "protobuf/com/bbva/business.accounts;products";
option java_multiple_files = true;
option java_package = "com.bbva.business.products.accounts";
importedProto 没有选项。它们在同一包中。 我是否需要在导入的原型中声明相同的选项?
再次对不起,这是一个基本问题,但是我找不到答案,逻辑不能告诉我,因为它们在同一个程序包中,但是如果另一个程序包包含它,它将从另一个主要的原型buf继承选项吗?还是每个原始文件可以有不同的选择?
解决方法
选项仅适用于放置在其中的文件/消息/字段/服务/ rpc。因此,文件顶层的选项仅适用于文件,不适用于包。您需要为每个文件重复这些选项。
Protoc可以一次为一个文件生成代码。如果一个文件的选项可能影响另一个文件,则意味着您将获得不同的结果,具体取决于一次调用protoc一起生成的文件。为了解决这个问题,协议必须要求一次生成一个包中的所有协议,而事实并非如此。 Protoc更类似于C / C ++,在C / C ++中,每个文件可以单独编译,而程序包只是一个命名空间机制。