Go protoc生成grpc.pb.go/pb.go时包名与目录不符的解决问询
解决方案
要实现在/proto目录生成fabtest.grpc.pb.go和fabtest.pb.go,且包名为fabtest,按以下步骤操作:
1. 修改fabtest.proto的go_package配置
将原配置替换为:
syntax = "proto3"; package fabtest; option go_package = "./;fabtest";
这里的语法是option go_package = "输出路径;包名";:
./指定生成文件的相对路径(即当前proto目录)fabtest指定生成Go文件的包名
2. 在/proto子目录执行编译命令
保持原有命令即可:
protoc -I=. --go_out=. ./fabtest.proto protoc -I=. --go-grpc_out=. ./fabtest.proto
原理说明
- 仅设置
go_package="."时,Go插件无法正确推导包名,会生成package __的无效包声明 - 设置
go_package="./fabtest"时,插件会按照路径创建子目录并生成文件 - 使用
./;fabtest的分号语法,明确指定输出路径和包名,既让文件留在当前目录,又保证包名正确
如果习惯在项目根目录执行命令,只需调整路径参数即可,效果完全一致:
protoc -I=./proto --go_out=./proto --go-grpc_out=./proto ./proto/fabtest.proto
内容的提问来源于stack exchange,提问作者chuckd833
相关产品推荐
相关产品推荐

