错误 "protoc-gen-go: program not found or is not executable"
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: program not found or is not executable
--go_out: protoc-gen-go: Plugin failed with status code 1."
我按照以下步骤解决了这个问题:
使用以下方法安装 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
参考:
有两种方法可以安装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
无法展开~
。
来自 GitHub 存储库,此解决方案对我有用。
Go版本为go版本go1.14.1Linux/amd64
将此添加到 .bashrc
并获取它。
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN
参考:protoc-gen-go: program not found or is not executable #795
确保您的 GOBIN 设置在 PATH
变量中。否则,您可能会遇到此问题。通过 运行 go env
检查 GOBIN
路径并确认 GOBIN
不为空。
如果它是空的那么试试下面的方法
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
protoc --go_out=plugins=grpc:. *.proto
必须添加以下包:
sudo apt install protobuf-compiler
在我的例子中,我还必须添加这个:
sudo apt install golang-goprotobuf-dev
许多其他回复解决了路径问题,但如果未安装,您可以使用以下命令安装它:
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
也试试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"
这对我有用。
当你在Visual Studio Code终端运行go get -u github.com/golang/protobuf/protoc-gen-go
时,如果Visual Studio代码没有找到$GOPATH和$GOBIN,它会在默认用户的主目录 /home/$username/go{/bin}
解决方案是将bin和pkg文件夹中的所有文件移动到您当前的go
路径(/usr/local/go{/bin})。 go
路径是 bin 文件夹中包含 go
文件的路径。
并将此行添加到 .bashrc file:
的末尾
export GOPATH=/usr/local/go:$PATH
export GOBIN=/usr/local/go/bin:$PATH
然后重启电脑。
使用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 like this 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库
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{}
我尝试了多种解决方案,但最后我发现 Go 环境变量才是真正的罪魁祸首。
如果您使用 Linux,请将这些变量添加到您的 .bashrc or .bash_profile 文件中。
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN
不要忘记在编辑后获取它的来源(例如,$source ~/.bashrc
)。
第 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"
注意:在您的终端上切换到 root 权限并按照以下步骤操作。这让我摆脱困境
- git 克隆 https://github.com/micro/protoc-gen-micro.git /usr/local/go/bin/src/github.com/micro/protoc-gen-micro
- cd src/github.com/micro/protoc-gen-micro
- 去建造
- cp protoc-gen-micro /bin
编码愉快!
Go 1.17+
来自https://go.dev/doc/go-get-install-deprecation
Starting in Go 1.17, installing executables with go get is deprecated. go install may be used instead.
~/.bashrc
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
安装
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go: downloading google.golang.org/protobuf v1.27.1
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go: downloading google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0
go: downloading google.golang.org/grpc v1.44.0
file.go
protoc --go-grpc_out=. *.proto
环境
- Apple M1 Pro
- Go版本go1.17.8darwin/arm64
我正在尝试使用 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: program not found or is not executable
--go_out: protoc-gen-go: Plugin failed with status code 1."
我按照以下步骤解决了这个问题:
使用以下方法安装 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
参考:
有两种方法可以安装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
无法展开~
。
来自 GitHub 存储库,此解决方案对我有用。
Go版本为go版本go1.14.1Linux/amd64
将此添加到 .bashrc
并获取它。
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN
参考:protoc-gen-go: program not found or is not executable #795
确保您的 GOBIN 设置在 PATH
变量中。否则,您可能会遇到此问题。通过 运行 go env
检查 GOBIN
路径并确认 GOBIN
不为空。
如果它是空的那么试试下面的方法
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
protoc --go_out=plugins=grpc:. *.proto
sudo apt install protobuf-compiler
在我的例子中,我还必须添加这个:
sudo apt install golang-goprotobuf-dev
许多其他回复解决了路径问题,但如果未安装,您可以使用以下命令安装它:
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
也试试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"
这对我有用。
当你在Visual Studio Code终端运行go get -u github.com/golang/protobuf/protoc-gen-go
时,如果Visual Studio代码没有找到$GOPATH和$GOBIN,它会在默认用户的主目录 /home/$username/go{/bin}
解决方案是将bin和pkg文件夹中的所有文件移动到您当前的go
路径(/usr/local/go{/bin})。 go
路径是 bin 文件夹中包含 go
文件的路径。
并将此行添加到 .bashrc file:
export GOPATH=/usr/local/go:$PATH
export GOBIN=/usr/local/go/bin:$PATH
然后重启电脑。
使用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 like this 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库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{}
我尝试了多种解决方案,但最后我发现 Go 环境变量才是真正的罪魁祸首。
如果您使用 Linux,请将这些变量添加到您的 .bashrc or .bash_profile 文件中。
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN
不要忘记在编辑后获取它的来源(例如,$source ~/.bashrc
)。
第 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"
注意:在您的终端上切换到 root 权限并按照以下步骤操作。这让我摆脱困境
- git 克隆 https://github.com/micro/protoc-gen-micro.git /usr/local/go/bin/src/github.com/micro/protoc-gen-micro
- cd src/github.com/micro/protoc-gen-micro
- 去建造
- cp protoc-gen-micro /bin
编码愉快!
Go 1.17+
来自https://go.dev/doc/go-get-install-deprecation
Starting in Go 1.17, installing executables with go get is deprecated. go install may be used instead.
~/.bashrc
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
安装
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go: downloading google.golang.org/protobuf v1.27.1
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go: downloading google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0
go: downloading google.golang.org/grpc v1.44.0
file.go
protoc --go-grpc_out=. *.proto
环境
- Apple M1 Pro
- Go版本go1.17.8darwin/arm64