protoc-gen-go-grpc: program not found or is not ex

2020-07-13 08:48发布

问题:

go version: go version go1.14 linux/amd64

go.mod

module [redacted]

go 1.14

require (
    github.com/golang/protobuf v1.4.0-rc.2
    google.golang.org/grpc v1.27.1
    google.golang.org/protobuf v1.20.0 // indirect
)

I am running the following command:

protoc -I ./src/pbdefs/protos/ --go-grpc_out=. src/pbdefs/protos/*.proto

to generate my GRPC output files from .proto files, with I am getting an error

protoc-gen-go-grpc: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1.

回答1:

OK, just found out, as per https://github.com/protocolbuffers/protobuf-go/releases/tag/v1.20.0

The v1.20 protoc-gen-go does not support generating gRPC service definitions. In the future, gRPC service generation will be supported by a new protoc-gen-go-grpc plugin provided by the Go gRPC project.

The github.com/golang/protobuf version of protoc-gen-go continues to support gRPC and will continue to do so for the foreseeable future.

EDIT 29/05/2020:

Following an update from @Mark in the comments, according to the Tracking issue on github, protoc-gen-go-grpc has now been merged. However, according to the same issue:

Even with this merged, it is unreleased (v0.0) and subject to change. We do plan to add a requirement that the Unimplemented service implementation be included in all registered services, with an escape hatch in the form of a command-line arg as suggested by @neild.



回答2:

If you haven't done, so you need to install the protoc-gen-go plugin like so:

go get github.com/golang/protobuf/protoc-gen-go

this will install the plugin (if your GOPATH is ${HOME}/go) to:

${HOME}/go/bin/protoc-gen-go

Then when running protoc, either update your path, or set it dynamically like so:

PATH="${PATH}:${HOME}/go/bin" protoc ...


回答3:

the missing plugin has been implemented at https://github.com/grpc/grpc-go.

command below should fix it

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc