You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:50:27