Go gRPC生成的pb.go文件import路径格式错误如何解决?
proto生成相对路径导入报错解决方案
生成相对导入路径_ "./validator"的核心原因是proto文件的go_package配置缺失/错误,或是导入路径、编译参数配置不合理,可按以下步骤修复:
步骤1:修正依赖项目的proto配置
打开customValidation项目中的validator.proto,在文件顶部syntax声明之后,新增/修正go_package配置:
syntax = "proto3"; package validator; // 必须添加该行,指定生成Go代码的完整导入路径 option go_package = "github.com/maanasasubrahmanyam-sd/customValidation/validator"; // 原有proto定义保持不变
修改后推送改动到customValidation仓库,在目标项目执行go get github.com/maanasasubrahmanyam-sd/customValidation@latest拉取最新版本。
步骤2:修正目标项目test.proto的导入写法
打开目标项目的test.proto,检查validator.proto的导入语句,必须写完整路径,禁止使用相对路径:
// 错误写法:import "./validator.proto"; // 正确写法 import "github.com/maanasasubrahmanyam-sd/customValidation/validator.proto";
步骤3:调整protoc编译参数
给所有Go相关的生成参数添加module前缀,匹配你目标项目go.mod的module名(假设customeValTest项目go.mod第一行是module github.com/maanasasubrahmanyam-sd/customeValTest),调整后的编译命令如下:
go get github.com/maanasasubrahmanyam-sd/customValidation@latest protoc \ -I. \ -I $GOPATH/pkg/mod/ \ --proto_path=${GOPATH}/pkg/mod/github.com/envoyproxy/protoc-gen-validate@v0.1.0 \ --proto_path=${GOPATH}/pkg/mod/github.com/google/protobuf/src \ --go_out="plugins=grpc,module=github.com/maanasasubrahmanyam-sd/customeValTest:./generated" \ --validate_out="lang=go,module=github.com/maanasasubrahmanyam-sd/customeValTest:./generated" \ --govalidators_out="module=github.com/maanasasubrahmanyam-sd/customeValTest:." \ ./interfaces/test_server/*.proto
主要调整点:
- 将原
-I $GOPATH/src/替换为-I $GOPATH/pkg/mod/,适配Go mod模式的依赖存储路径 - 给
--go_out、--validate_out、--govalidators_out均添加module=xxx参数,保证所有生成插件输出的导入路径统一为绝对路径
步骤4:验证修复效果
重新执行编译命令后,检查生成的test.pb.go导入语句,会替换为import validator "github.com/maanasasubrahmanyam-sd/customValidation/validator",无相对路径导入。在Goland点击Go模块同步按钮,所有报错即可消失。
内容的提问来源于stack exchange,提问作者Maana
相关产品推荐
相关产品推荐

