Protobuf相对导入失败求助:service.proto编译提示文件找不到
解决protoc生成service.pro时报错"user/models/models.proto: File not found"
问题原因
service.proto中的import "user/models/models.proto"路径与执行protoc命令时指定的搜索根目录不匹配,导致protoc无法定位到依赖的proto文件。
解决方案
根据你的文件夹结构,选择以下任一方案:
方案1:调整import路径并修正命令(推荐)
假设你的文件夹结构为(执行命令时处于user目录下,该目录包含models和service子文件夹):
user/ ├── models/ │ └── models.proto └── service/ └── service.proto
- 修改service.proto中的import语句:
// 替换原有的 import "user/models/models.proto" import "models/models.proto"; - 执行生成命令:
生成models代码:
生成service代码:protoc -I=. --go_out=. models/models.protoprotoc -I=. --go-grpc_out=. service/service.proto
方案2:指定正确的根目录作为protoc搜索路径
如果你的文件夹结构为(存在一个包含user文件夹的根目录):
根目录/ └── user/ ├── models/ │ └── models.proto └── service/ └── service.proto
- 进入
根目录(包含user文件夹的目录) - 执行以下命令:
生成models代码:
生成service代码:protoc -I=. --go_out=. user/models/models.proto
此方式下,protoc会以根目录为搜索起点,通过protoc -I=. --go-grpc_out=. user/service/service.protouser/models/models.proto路径找到依赖文件。
额外注意事项
- 确认
go_package指定的路径符合你期望的代码生成位置,避免生成路径混乱。 - 执行命令时,确保当前所在目录与命令中的路径参数完全匹配。
内容的提问来源于stack exchange,提问作者Praveen Kumar
相关产品推荐
相关产品推荐

