Protoc生成GRPC文件路径不一致,如何统一输出到指定目录?
解决gRPC protoc编译后pb_grpc.go文件路径错误的问题
问题背景
我的gRPC服务定义在github.com/myuser/myrepo/protos/iam/v1/service.proto,文件头部内容如下:
syntax = "proto3"; package myrepo.iam.v1; option go_package = "github.com/myuser/myrepo-go/iam/v1"; // golang
在myrepo目录下执行以下编译命令:
find ./protos -type f -name "*.proto" -exec protoc --go_out=./gopb --go-grpc_out=./gopb --go_opt=module=github.com/myuser/myrepo-go {} \;
命令执行成功后,service.pb.go生成在正确的gopb/iam/v1/目录,但service_grpc.pb.go却生成在gopb/github.com/myuser/myrepo-go/iam/v1/目录,需要让两类文件都输出到gopb/iam/v1/目录。
解决方案
问题核心是仅为普通pb文件生成插件设置了module参数,未给gRPC文件生成插件配置对应参数。--go_opt=module=xxx仅作用于protoc-gen-go,而protoc-gen-go-grpc需要单独指定--go-grpc_opt=module=xxx。
修改后的编译命令如下:
find ./protos -type f -name "*.proto" -exec protoc --go_out=./gopb --go-grpc_out=./gopb --go_opt=module=github.com/myuser/myrepo-go --go-grpc_opt=module=github.com/myuser/myrepo-go {} \;
添加--go-grpc_opt=module=github.com/myuser/myrepo-go参数后,protoc-gen-go-grpc会基于指定的module路径生成文件,最终两类文件都会输出到gopb/iam/v1/目录下。
内容的提问来源于stack exchange,提问作者Woody1193
相关产品推荐
相关产品推荐

