76

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?

5
  • 5
    Try manually installing based on the instructions here: github.com/golang/protobuf go get -u github.com/golang/protobuf/{proto,protoc-gen-go}. There may be something wrong with the homebrew install. Commented Jan 22, 2015 at 22:00
  • Reinstalled everything. still the same error. I switched over to ver 2.6.0 . Still the same error. Commented Jan 23, 2015 at 0:26
  • 2
    You say protoc-gen-go is in your "go path", but it needs to be in your shell path, i.e. one of the directories listed in the PATH environment variable. What happens if you just type protoc-gen-go at the command line? If it says "command not found" (or similar) then it's not in your PATH. Commented Jan 23, 2015 at 3:26
  • Thanks @KentonVarda, you should submit that as an answer. Commented May 7, 2015 at 2:08
  • OK, I posted it as an answer. Commented May 7, 2015 at 10:08

16 Answers 16

63

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.

Sign up to request clarification or add additional context in comments.

6 Comments

FYI, it should live at $GOPATH/bin. So do this: export PATH=$PATH:$GOPATH/bin
I have it in path and executable, but still report Plugin failed with status code 1.
@JiangYD, I had the same problem. Looks like protoc couldn't expand paths like ~/go/bin. Make sure you are using the complete directory in your PATH settings like /home/johndoe/go/bin instead of ~/go/bin.
@darkdefender27 do you have GOPATH set? If not the default is $HOME/go/ . protoc seems to be ok expanding $HOME instead of ~ so for me adding $HOME/go/bin to my path worked.
I had the same issue but it was because GOPATH itself was not set within .bash_profile. So add the following line export GOPATH=$(go env GOPATH) above your export PATH=$PATH:$GOPATH/bin line inside the .bash_profile file.
|
31

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.

Comments

31
  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 

2 Comments

Worked for me! :)
For ZSH Add import statements in - .zshrc file & run $ source .zshrc
13

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

sudo apt-get install golang-goprotobuf-dev

2 Comments

Tried this 1/28/2016 and this does not work anymore. you can build .pb.go files, but not import them.
tried 3-3-2017, solved my issue same as OP, protoc-gen-go: program not found or is not executable
6

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.

Comments

4

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.

Comments

3

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.

3 Comments

Can you explain how did you find the installation directory for protoc-gen-go? FYI, protoc-gen-go is not there for me under $GOPATH/bin/
@darkdefender27 How did you install the protoc-gen-go?
Using $ go get -u github.com/golang/protobuf/protoc-gen-go @pangpang
3

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"

1 Comment

I tried adding the PATH variables and restaring terminal or source to reload PATH variables. Copying the file fix all the stuff and generating code on ma Catalina is working now, thanks !
3

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" 

Comments

3

On macOS, I had installed just protoc with brew install protobuf.

So, to get the go code generator, I also needed to do brew install protoc-gen-go.

Comments

2

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.

Comments

0

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

Comments

0

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

Comments

0

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.

2 Comments

7 year old ticket.
As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.
-1

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 ~.

Comments

-1

On macOS: The Same problem for me. First installed by Brew, could not force it to work, so I went to: https://grpc.io/docs/languages/go/quickstart/

uninstall all already installed versions and do as in the tutorial:

go install google.golang.org/protobuf/cmd/[email protected] go install google.golang.org/grpc/cmd/[email protected] 

then:

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

to check go env GOPATH just run

go env 

Please, before running the commands, check current versions.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.