protoc:Go 包的包名不一致

Woo*_*193 3 go protocol-buffers

我正在使用 protoc 创建一些 DTO。定义采用以下结构:

/protobuf
|-- common.proto
|-- /api
    |-- /service
        |-- csvdownload.proto
Run Code Online (Sandbox Code Playgroud)

我的csvdownload.proto看起来像这样:

syntax = "proto3";
package protobuf.api.service;

import "common.proto";

option go_package = ".;service"; // golang

message CsvExportRequest {
    Common.Currency exportCurrency = 2;
    Common.Decimal rounding = 3;
}
Run Code Online (Sandbox Code Playgroud)

和存根common.proto看起来像这样:

syntax = "proto3";
package protobuf;

option go_package = ".;gopb"; // golang
Run Code Online (Sandbox Code Playgroud)

我试图csvdownload.proto通过从/protobuf目录中运行以下命令来编译:

protoc --go_out=gopb --go_opt=paths=source_relative .\api\service\csvdownload.proto
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

protoc-gen-go:转到包“。” 具有不一致的名称 gopb (common.proto) 和 service (api/service/csvdownload.proto)

我认为这意味着无法生成代码,因为common.protocsvdownload.proto声明了不同的包,但我不确定这是否会有所作为,并且根据我对 Protobuf 工作原理的理解,它不应该妨碍我编译csvdownload.proto. 我在这里做错了什么?

任何处理此问题的帮助将不胜感激。

ttr*_*asn 5

您必须将目录结构更改为如下所示:

/protobuf
|-- /common
    |-- common.proto
|-- /api
    |-- /service
        |-- csvdownload.proto
Run Code Online (Sandbox Code Playgroud)

另外,我建议你添加一个真实的包裹地址 common.proto

syntax = "proto3";
package protobuf;

option go_package = "myProject.com/proto/common"; // golang
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样将这个通用导入到你的其他原型中。

import "common/common.proto";
Run Code Online (Sandbox Code Playgroud)

生成代码是(这是您想要的完整请求(我认为))

protoc --proto_path=../base_directory/protobuf/api/service/ --proto_path=../base_directory/protobuf/ --go_out=plugins=grpc:./the/generated/path/you/want/directory ../base_directory/protobuf/api/service/csvdownload.proto
Run Code Online (Sandbox Code Playgroud)