Unable to build protobuf to go endpoint

GoProtocol Buffers

Go Problem Overview


using protobuf version 2.6.1 ( which i installed via homebrew)

I am trying to run

$ protoc --go_out=../cloud/ *.proto

I keep receiving this error.

$ protoc-gen-go: program not found or is not executable
$ --go_out: protoc-gen-go: Plugin failed with status code 1.

I have the protoc-gen-go installed in my go path. Anyone else have this issue?

Go Solutions


Solution 1 - Go

protoc-gen-go needs to be in your shell path, i.e. one of the directories listed in the PATH environment variable, which is different from the Go path. You can test this by simply typing protoc-gen-go at the command line: If it says "command not found" (or similar) then it's not in your PATH.

Solution 2 - Go

Using

$ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

is more safe than using

$ sudo apt-get install golang-goprotobuf-dev

Because the latest protoc-gen-go is using the lib github.com/golang/protobuf/proto, but protoc-gen-go in apt-get using the lib code.google.com/p/goprotobuf/proto which didn't exist now.

Solution 3 - Go

  1. You should properly define your GO_PATH - where your go packages live. In other words, GO_PATH is your go workspace. The GO_PATH should be ~/go.

  2. protoc-gen-go should be in your PATH. While protoc-gen-go lives in $GO_PATH/bin after you installed it.


Add these 2 important lines to your ~/.bash_profile:

export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin

Then you need to start a new shell session or just type in this line:

$ source ~/.bash_profile

Solution 4 - Go

On Ubuntu 18.04, this is verified working to solve this issue:

sudo apt-get install golang-goprotobuf-dev

Solution 5 - Go

I have Ubuntu 18.04.02 LTS and installed protoc using

sudo apt install protobuf-compiler

I have my GOPATH and GOBIN set correctly, but still when I did a protoc --go_out=. <filename> I was getting

protoc-gen-go: program not found or is not executable
--go_out: protoc-gen-go: Plugin failed with status code 1.

After reading bunch of places, was able to find that doing

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

was able to fix the issue. Hope this helps someone out there.

Solution 6 - Go

How I solved:

  1. Add $GOPATH/bin to PATH by running export PATH=$PATH:$GOPATH/bin
  2. add export GOPATH=$(go env GOPATH) above export PATH=$PATH:$GOPATH/bin line inside the .bash_profile file.
  3. run go get -u for the required packages again.
  4. run the code protoc --go_out=../cloud/ *.proto in your case.

Solution 7 - Go

I met the same problem.

$ protoc --go_out=plugins=grpc:pb/ *.proto
protoc-gen-go: program not found or is not executable
--go_out: protoc-gen-go: Plugin failed with status code 1.

The solution as below:

Find the installation directory of protoc-gen-go, it must be in your $PATH.

export PATH=$PATH:/path/to/dir

You'd better add it to your .bash_profile

echo $"export PATH=\$PATH:$(/path/to/dir)" >> ~/.bash_profile
source ~/.bash_profile

then everything is ok.

Solution 8 - Go

What I did to solve this was:

copy protoc-gen-go from the go bin folder in go workspace to /usr/local/bin/

run your command as before in your case "protoc --go_out=../cloud/ *.proto"

Solution 9 - Go

Directly from grpc documentation:

Go plugins for the protocol compiler:

Install the protocol compiler plugins for Go using the following commands:

$ export GO111MODULE=on  # Enable module mode
$ go get google.golang.org/protobuf/cmd/protoc-gen-go \
         google.golang.org/grpc/cmd/protoc-gen-go-grpc

Update your PATH so that the protoc compiler can find the plugins:

$ export PATH="$PATH:$(go env GOPATH)/bin"

Solution 10 - Go

Mby will help for somebody. I'm on Fedora 29.

When I installed Go I did:

echo 'export GOPATH=$HOME/Go' >> $HOME/.bashrc
source $HOME/.bashrc

So I have my GOPATH set up. Next I do:

echo 'export PATH=$PATH:$GOPATH/bin' >> $HOME/.bashrc
source $HOME/.bashrc

And my protoc compiler work lika a charm.

Solution 11 - Go

If you're using Fedora, ensure that the package "protoc-gen-go" is installed, and it's binary is in your shel PATH.

$sudo dnf install protoc-gen-go -y

Solution 12 - Go

If found this page because you get the error message in console when you run proto:

Protoc command not found

If you use linux then follow the instructions below:

  1. download the protoc file here https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4 (i used to download the protoc-3.19.4-linux-x86_64.zip in my case.
  2. extract the files in this folder `/home/your_username/.local
  3. then you will have it like this: /home/your_username/.local/bin/protoc
  4. Profit. this will work by typing just "protoc" in your terminal

Solution 13 - Go

enter image description here

I have installed protoc 3.20.0. But I didn't get the tag for generating the code for Golang. I have pasted the screenshot of all available tags.

Solution 14 - Go

Ensure that your path to proton-gen-go in your PATH variable is absolute (i.e. /Users/me/go/bin instead of ~/go/bin.

Apparently protoc does not know how to expand ~.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionR.J. RobinsonView Question on Stackoverflow
Solution 1 - GoKenton VardaView Answer on Stackoverflow
Solution 2 - GoXibai LiView Answer on Stackoverflow
Solution 3 - GoQuy TangView Answer on Stackoverflow
Solution 4 - Go00imvj00View Answer on Stackoverflow
Solution 5 - GoBhaskar ReddyView Answer on Stackoverflow
Solution 6 - GoSushilinuxView Answer on Stackoverflow
Solution 7 - GopangpangView Answer on Stackoverflow
Solution 8 - GoBoluwatife FakoredeView Answer on Stackoverflow
Solution 9 - GoYrineu RodriguesView Answer on Stackoverflow
Solution 10 - GoDzintarsView Answer on Stackoverflow
Solution 11 - GoDaniel OspitiaView Answer on Stackoverflow
Solution 12 - GomuinhView Answer on Stackoverflow
Solution 13 - GoManish KumarView Answer on Stackoverflow
Solution 14 - GoPepView Answer on Stackoverflow