protoc-gen-go:找不到程序或不可执行

时间:2019-08-28 22:39:39

标签: go protocol-buffers grpc proto protoc

我正在尝试使用go grpc构建示例应用程序,但无法使用“协议”生成代码

已使用以下方法安装了所需的库/运行包:

  1. 获取-u google.golang.org/grpc
  2. go get -u github.com/golang/protobuf/protoc-gen-go

也尝试设置路径,但是没有运气。

“原型”文件示例:

syntax = "proto3";

package greet;
option go_package="greetpb";

service GreetService{}

错误消息: “ protoc-gen-go:找不到程序或不可执行 --go_out:protoc-gen-go:插件失败,状态码为1。“

11 个答案:

答案 0 :(得分:5)

从github仓库中,这个解决方案对我有用。

Go版本为go version go1.14.1 linux/amd64

将其添加到.bashrc并获取源。

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN

https://github.com/golang/protobuf/issues/795

答案 1 :(得分:5)

以防万一其他人仍然面临此问题,请尝试grpc.io documentation

的官方解决方案

协议编译器的 Go 插件:

使用以下命令为 Go 安装协议编译器插件:

$ 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

更新您的 PATH 以便 protoc 编译器可以找到插件:

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

这对我有用。

答案 2 :(得分:2)

有两种安装protobuf编译器的方法,如果您在Ubuntu上,则可以使用它,

sudo apt install protobuf-compiler

那当然是标准方法了,

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

在这里,它只是添加路径。假设安装Go时是这样做的,

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

现在您可以扩展它,

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

奇怪的是,protoc无法扩展~

答案 3 :(得分:2)

他们在上面评论说,必须添加以下软件包

sudo apt install protobuf-compiler

在我的情况下,我还必须添加一个..

sudo apt install golang-goprotobuf-dev

答案 4 :(得分:2)

使用 go get 下载以下软件包:

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

要设置设置 GOPATHGOROOT,请按照以下步骤操作:

但是,首先,运行 go env

如果你看到没有安装 Go,你可以通过 Homebrew 安装它。如果您看到输出,则您的 Go 已安装。它会显示所有已设置和未设置的环境。

如果您看到 GOPATH 为空:

在您的计算机上的任何位置为 Go 项目创建任何目录:~/GO_PROJECTS 然后export GOPATH=~/GO_PROJECTS

如果您看到 GOROOT 为空:

运行 which go(在我的电脑上:/usr/local/bin/go) 然后编辑您的 ~/.zshrc 文件以添加如下所示的导出行 export GOROOT=/usr/local/go

您还可以编辑您的 ~/.zshrc 文件以添加以下行来设置 GOPATHGOROOT

如果您已从原始 pkg 安装 Go,请从 https://golang.org/doc/install 下载。

export GOPATH=$HOME/dev/go-workspace
export GOROOT=/usr/local/go
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOROOT/bin

如果您使用 Homebrew 安装了 Go。

export GOPATH=$HOME/dev/go-workspace
export GOROOT=/usr/local/opt/go/libexec
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOROOT/bin

保存并退出编辑器。然后,获取您的 ~/.zshrc

source ~/.zshrc

答案 5 :(得分:1)

确保在PATH变量中设置了GOBIN。否则,您可能会遇到此问题。通过运行GOBIN检查go env路径,并确认GOBIN不为空。

如果为空,请尝试如下操作

export GOPATH=$HOME/go
PATH=$PATH:$GOPATH/bin
protoc --go_out=plugins=grpc:. *.proto

答案 6 :(得分:1)

当您在 vscode 终端中运行 go get -u github.com/golang/protobuf/protoc-gen-go 时。如果 vscode 没有找到 $GOPATH & $GOBIN 它将安装包在默认用户的主目录 /home/$username/go{/bin}

解决方案是将bin和pkg文件夹中的所有文件移动到您当前的go路径(/usr/local/go{/bin}),go path是bin文件夹中包含go文件的 并将这一行添加到 .bashrc 文件的末尾

export GOPATH=/usr/local/go:$PATH
export GOBIN=/usr/local/go/bin:$PATH

然后重启电脑

答案 7 :(得分:1)

我尝试了多种解决方案,但最后发现 go env 变量才是真正的罪魁祸首。 如果您使用的是 linux,请将这些变量添加到您的 bashrc 或 bashprofile 文件中。

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN

并且不要忘记在编辑后获取它的来源。 (例如$source ~/.bachrc

答案 8 :(得分:0)

通过以下步骤解决:

使用以下命令安装go库: 去获取-u github.com/golang/protobuf/{proto,protoc-gen-go}

  1. vim〜/ .bash_profile
  2. 添加:“ export GO_PATH =〜/ go”和“ export PATH = $ PATH:/ $ GO_PATH / bin”
  3. 来源〜/ .bash_profile

参考:Unable to build protobuf to go endpoint

答案 9 :(得分:0)

许多其他响应解决了路径问题,但如果未安装,则可以使用以下命令进行安装:

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

答案 10 :(得分:0)

万一有人现在面临同样的问题。

使用

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

确保设置了 GOPATH 变量 就我而言,我创建了一个名为 gocode 的文件夹,但如果您的代码位于另一个文件夹中,则必须对其进行更改

export GOPATH=$HOME/gocode
export Path=$Path:$GOPATH/bin

在执行此步骤后,我发现另一个错误 protoc-gen-go failed :: 导入路径必须至少包含一个正斜杠 ('/') 字符。要解决此问题,请更改选项中的路径

syntax = "proto3";

package greet;

option go_package="./greet/greetpb";

service GreetService{}