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

前端 未结 5 1882
野趣味
野趣味 2020-12-16 01:34

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
    go         


        
相关标签:
5条回答
  • 2020-12-16 01:47

    For all who aren't much into the topic (like me) and still have trouble to figure out a working solution, here's a step-by-step approach:

    1. apt install protobuf-compiler installs the compiler under apt install protobuf-compiler, available via protoc from then.
    2. Install the old go generator plugin to be used by protoc: go get -u google.golang.org/protobuf/cmd/protoc-gen-go and go install google.golang.org/protobuf/cmd/protoc-gen-go. Also, make sure that the installed plugin can be found in $PATH or add it with export PATH=$PATH:$(go env GOPATH)/bin if needed.
    3. To tell that plugin not only to generate the protobuf message type information but also the grcp methods, use a command like protoc --go_out=plugins=grpc:my/relative/output/path ./my_file.proto.

    Looks kinda trivial once you've figured that out, but it's quite hard to figure that out if you aren't into that topic and only have scarce information about how the go files generator generator and the grcp extension are supposed to work together.

    0 讨论(0)
  • 2020-12-16 01:59

    The Golang Protobuf has released a new version of Go protocol buffers which they are calling it as the APIv2.

    Because APIv2 is not backwards compatible with APIv1, therefore we will need to adapt all our Golang code for the new API.

    You can learn more about the new API here and here

    Migration steps:

    In order to run the new code generation will be necessary to install the following gRPC gen plugins:

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

    Then use the following command to generate the code.

      # generate the messages
     protoc --go_out="$GO_GEN_PATH" -I "$dependecies" "$proto"
    
     # generate the services
     protoc --go-grpc_out="$GO_GEN_PATH" -I "$dependecies" "$proto"
    
    0 讨论(0)
  • 2020-12-16 02:03

    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 ...
    
    0 讨论(0)
  • 2020-12-16 02:07

    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
    
    0 讨论(0)
  • 2020-12-16 02:08

    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.

    0 讨论(0)
提交回复
热议问题