为了账号安全,请及时绑定邮箱和手机立即绑定

protoc:Go 包的包名不一致

protoc:Go 包的包名不一致

Go
30秒到达战场 2022-07-11 14:46:20
我正在使用 protoc 创建一些 DTO。定义采用以下结构:/protobuf|-- common.proto|-- /api    |-- /service        |-- csvdownload.proto我的csvdownload.proto样子是这样的:syntax = "proto3";package protobuf.api.service;import "common.proto";option go_package = ".;service"; // golangmessage CsvExportRequest {    Common.Currency exportCurrency = 2;    Common.Decimal rounding = 3;}和common.proto看起来像这样的存根:syntax = "proto3";package protobuf;option go_package = ".;gopb"; // golang我试图通过从目录csvdownload.proto中运行以下命令来编译:/protobufprotoc --go_out=gopb --go_opt=paths=source_relative .\api\service\csvdownload.proto但是,我收到以下错误:protoc-gen-go:转到包“。” 名称不一致 gopb (common.proto) 和服务 (api/service/csvdownload.proto)我认为这意味着无法生成代码,因为common.proto并且csvdownload.proto已经声明了不同的包,但我不确定这是否会有所作为,并且根据我对 Protobuf 工作原理的理解,它不应该妨碍我的编译能力csvdownload.proto。我在这里做错了什么?处理此问题的任何帮助将不胜感激。
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

您必须将目录结构更改为以下内容:


/protobuf

|-- /common

    |-- common.proto

|-- /api

    |-- /service

        |-- csvdownload.proto

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


syntax = "proto3";

package protobuf;


option go_package = "myProject.com/proto/common"; // golang

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


import "common/common.proto";

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


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


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 235 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信