引入其他Proto文件后生成文件依赖找不到问题求助
问题排查与解决方案
问题根源
- 仅编译了
auth.proto,未编译其依赖的ws.proto,导致auth.pb.go引用的api.ws.v1包对应的ws.pb.go文件不存在。 - 编译命令未正确处理Go模块路径与Proto包的映射关系。
解决方案
步骤1:编译依赖的ws.proto
在项目根目录执行以下命令,生成ws.proto对应的Go文件:
protoc --proto_path=. --go_out=paths=source_relative:. ./api/ws/v1/ws.proto
执行后会在./api/ws/v1/目录下生成ws.pb.go,补全auth.pb.go需要的依赖文件。
步骤2:编译auth.proto
继续在项目根目录执行:
protoc --proto_path=. --go_out=paths=source_relative:. ./api/auth/service/v1/auth.proto
paths=source_relative参数会让protoc根据Proto文件的相对路径生成对应Go文件,保持与Proto文件同目录,匹配你的项目结构。
可选:批量编译所有Proto文件
如果存在多个Proto文件,可通过通配符一次性处理,避免逐个编译:
protoc --proto_path=. --go_out=paths=source_relative:. ./api/**/*.proto
验证
编译完成后,确认./api/ws/v1/ws.pb.go和./api/auth/service/v1/auth.pb.go均已生成,随后执行go mod tidy或直接编译项目,依赖找不到的错误即可消除。
内容的提问来源于stack exchange,提问作者Guowei
相关产品推荐
相关产品推荐

