可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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?
回答1:
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
.
回答2:
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.
回答3:
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
.
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
回答4:
On Ubuntu 18.04, this is verified working to solve this issue:
sudo apt-get install golang-goprotobuf-dev
回答5:
How I solved:
- Add
$GOPATH/bin
to PATH by running
export PATH=$PATH:$GOPATH/bin
- add
export GOPATH=$(go env GOPATH)
above export PATH=$PATH:$GOPATH/bin
line inside the .bash_profile
file.
- run
go get -u
for the required packages again.
- run the code
protoc --go_out=../cloud/ *.proto
in your case.
回答6:
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.
回答7:
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"
回答8:
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.
回答9:
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 ~
.
回答10:
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.
回答11:
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