[英]Error "protoc-gen-go: program not found or is not executable"
我正在尝试使用 Go gRPC构建示例应用程序,但我无法使用“protoc”生成代码
我已经使用以下方法安装了所需的库和 Go 包:
go get -u google.golang.org/grpc
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。”
有两种方法可以安装 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
无法扩展~
。
我按照以下步骤解决了它:
使用以下命令安装 Go 库:
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
vim ~/.bash_profile
export GO_PATH=~/go export PATH=$PATH:/$GO_PATH/bin
source ~/.bash_profile
Tannisha Hill 表示必须添加以下软件包:
sudo apt install protobuf-compiler
就我而言,我还必须添加这个:
sudo apt install golang-goprotobuf-dev
从 GitHub 存储库中,这个解决方案对我有用。
Go 版本是go 版本 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
Ref.: protoc-gen-go: program not found or is not executable #795
还可以尝试grpc.io 文档中的官方解决方案。
协议编译器的 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"
这对我有用。
来自https://go.dev/doc/go-get-install-deprecation
从 Go 1.17 开始,不推荐使用 go get 安装可执行文件。 可以使用 go install 代替。
~/.bashrc
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
安装
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
去:下载 google.golang.org/protobuf v1.27.1
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
去:下载google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0
去:下载google.golang.org/grpc v1.44.0
文件.go
protoc --go-grpc_out=. *.proto
环境
确保您的 GOBIN 设置在PATH
变量中。 否则,您可能会遇到此问题。 通过运行go env
检查GOBIN
路径并确认GOBIN
不为空。
如果它是空的,那么尝试如下
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
protoc --go_out=plugins=grpc:. *.proto
使用go get
下载以下包:
go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
要设置GOPATH
和GOROOT
,请按照以下步骤操作:
但是,首先,运行go env
。
如果你看到 Go 没有安装,你可以通过Homebrew安装它。 如果您看到输出,则说明您的 Go 已安装。 它向您显示所有已设置和未设置的环境。
如果您看到GOPATH
为空:
在我的情况下,为 Go 项目在计算机上的任何位置创建任何目录: ~/GO_PROJECTS 然后export GOPATH=~/GO_PROJECTS
。
如果您看到GOROOT
为空:
运行which go
(在我的计算机上:/usr/local/bin/go)然后编辑您的~/.zshrc
文件以添加以下行 export 像这样export GOROOT=/usr/local/go
。
您还可以编辑~/.zshrc
文件以添加以下行来设置GOPATH
和GOROOT
:
如果您已经从原始 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
我尝试了多种解决方案,但最后我发现 Go 环境变量才是真正的罪魁祸首。
如果您使用的是 Linux,请将这些变量添加到您的.bashrc或.bash_profile文件中。
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN
并且不要忘记在编辑后获取它(例如, $source ~/.bashrc
)。
许多其他响应解决了路径问题,但如果未安装,您可以使用以下命令安装它:
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
当您在Visual Studio Code终端中运行go get -u github.com/golang/protobuf/protoc-gen-go
时,如果 Visual Studio Code 没有找到 $GOPATH 和 $GOBIN,它将在默认用户的位置安装包主目录 /home/$username/go{/bin}
解决方案是将bin和pkg文件夹中的所有文件移动到您当前的go
路径(/usr/local/go{/bin})。 go
路径是包含 bin 文件夹中的go
文件的路径。 并将这一行添加到.bashrc 文件的末尾:
export GOPATH=/usr/local/go:$PATH
export GOBIN=/usr/local/go/bin:$PATH
然后重新启动计算机。
步骤1:
sudo apt install protobuf-compiler
第2步:
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
第 3 步:
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
更新您的 PATH 以便protoc编译器可以找到插件:
export PATH="$PATH:$(go env GOPATH)/bin"
如果有人现在面临同样的问题。
使用安装 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 :: The import path must contain at least one forward slash ('/') character。 要解决此问题,请更改选项中的路径
syntax = "proto3";
package greet;
option go_package="./greet/greetpb";
service GreetService{}
注意:在您的终端上切换到 root 权限并按照以下步骤操作。 这让我摆脱了困境
快乐编码!
安装 Go 后,使用 go get 下载以下包:
$ 去获取 google.golang.org/protobuf/cmd/protoc-gen-go
$ 去获取 google.golang.org/grpc/cmd/protoc-gen-go-grpc
您看到此消息的原因是因为 Go 无法访问可执行文件。 Go 在调用时查找 ~/go/bin 以查找可执行文件。 让我们检查一下您的 PATH 变量是否具有可执行文件。 但首先,让我们看看错误。
protoc-gen-go:程序未找到或不可执行
为了解决这个问题,我们应该首先检查 ~/go/bin 是否在我们的路径中。
echo $PATH
检查结果以查看 ~/go/bin 是否在您的路径中。
如果没有,让我们将它添加到我们的路径中:
export PATH=$PATH:/$GO_PATH/bin
如果安装了 protoc-gen-go,现在一切都应该工作了。
如果没有,请安装 protoc-gen-go。
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
以上都不适合我。 事实证明,您必须将 go 转到此页面,然后在解压缩到您的 GOPATH 时下载适合您平台的文件。 例如这个 protoc-21.5-osx-x86_64.zip 用于 Intel macOS 或这个用于 linux 64 位 protoc-21.5-linux-x86_64.ZADCDBD79A8D8417F22A
它对我有用:
检查 protoc-gen-go 在你的系统上安装,如果它没有安装然后在你的系统上安装它。 对于苹果 *
brew install protoc-gen-go
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.