使用protoc生成Go代码时无法识别service定义未生成服务代码怎么办
问题原因
从protoc-gen-go v1.4.0版本(也就是你使用的v1.26.0所属的google.golang.org/protobuf系列版本)开始,gRPC服务代码的生成逻辑已经从protoc-gen-go中拆分出去,由独立的protoc-gen-go-grpc插件负责。你当前的生成命令只调用了protoc-gen-go,自然只会生成消息序列化相关代码,不会生成service对应的服务代码。
解决步骤
- 首先安装必需的插件,执行如下命令:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
安装完成后确认你的GOPATH/bin路径已加入系统环境变量PATH,保证protoc可以正常调用这两个插件。
- 调整你的protoc生成命令,新增gRPC代码生成参数:
protoc .\greet\greetpb\greet.proto --go_out=. --go-grpc_out=.
生成结果验证
执行调整后的命令后,会在指定路径下生成两个文件:
greet.pb.go:和你之前生成的文件内容一致,负责proto消息的序列化、反序列化逻辑greet_grpc.pb.go:新增的服务代码文件,包含GreetService对应的服务端接口、客户端实现、服务注册方法等你需要的服务相关代码。
补充说明:如果你使用的是旧版
github.com/golang/protobuf系列的protoc-gen-go,也可以通过protoc .\greet\greetpb\greet.proto --go_out=plugins=grpc:.的参数生成服务代码,但该方案已经官方废弃,不推荐继续使用。
内容的提问来源于stack exchange,提问作者Satish Kumar
相关产品推荐
相关产品推荐

