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

May*_*pta 26 go protocol-buffers proto grpc protoc

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

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

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

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

示例“原型”文件:

syntax = "proto3";

package greet;
option go_package="greetpb";

service GreetService{}
Run Code Online (Sandbox Code Playgroud)

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

rbe*_*nto 55

去1.17+

来自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
Run Code Online (Sandbox Code Playgroud)

安装

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
Run Code Online (Sandbox Code Playgroud)

去:下载 google.golang.org/protobuf v1.27.1

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
Run Code Online (Sandbox Code Playgroud)

去:下载 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
Run Code Online (Sandbox Code Playgroud)

环境

  • 就我而言,当我将这部分 `export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin` 添加到 ~/.bash_profile 时,它​​就起作用了 (3认同)

小智 22

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

sudo apt install protobuf-compiler
Run Code Online (Sandbox Code Playgroud)

那么当然有标准的方式,

go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
Run Code Online (Sandbox Code Playgroud)

这里只是添加路径。假设您在安装 Go 时执行了此操作,

echo 'export GOPATH=$HOME/Go' >> $HOME/.bashrc
source $HOME/.bashrc
Run Code Online (Sandbox Code Playgroud)

现在你可以扩展这个,

echo 'export PATH=$PATH:$GOPATH/bin' >> $HOME/.bashrc
source $HOME/.bashrc
Run Code Online (Sandbox Code Playgroud)

奇怪的protoc是不能扩展~


May*_*pta 17

按照以下步骤解决:

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

  1. vim ~/.bash_profile
  2. 添加:
export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin
Run Code Online (Sandbox Code Playgroud)
  1. source ~/.bash_profile

参考:无法构建 protobuf 去端点

  • `go:模块 github.com/golang/protobuf 已弃用:请使用“google.golang.org/protobuf”模块。` `go get:已弃用在模块模式下使用“go get”安装可执行文件。` (3认同)
  • @TannishaHill `.bash_profile` 或更好的 `.profile` 对于您导出的环境变量来说更可取,因为它通常只由登录 shell 执行一次。`.bashrc` 由所有交互式 shell 执行,因此每次手动启动子 shell 时,您最终都会轻松地重新导出环境变量。 (2认同)

小智 12

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

sudo apt install protobuf-compiler
Run Code Online (Sandbox Code Playgroud)

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

sudo apt install golang-goprotobuf-dev
Run Code Online (Sandbox Code Playgroud)


Kri*_* PC 7

从 github repo 这个解决方案对我有用。

转到版本是 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
Run Code Online (Sandbox Code Playgroud)

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


Yri*_*ues 7

以防万一如果其他人仍然面临这个问题,请尝试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
Run Code Online (Sandbox Code Playgroud)

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

$ export PATH="$PATH:$(go env GOPATH)/bin"
Run Code Online (Sandbox Code Playgroud)

这对我有用。


Raj*_*ngh 7

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

go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
Run Code Online (Sandbox Code Playgroud)

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

但是,首先,运行go env

如果您发现 Go 尚未安装,您可以通过Homebrew安装它。如果您看到输出,则表明您的 Go 已安装。它向您显示所有已设置和未设置的环境。

如果您看到 为空GOPATH

在我的例子中,在计算机上的任何位置为 Go 项目创建任何目录: ~/GO_PROJECTS then 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
Run Code Online (Sandbox Code Playgroud)

如果您使用 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
Run Code Online (Sandbox Code Playgroud)

保存并退出编辑器。然后,来源你的~/.zshrc.

source ~/.zshrc
Run Code Online (Sandbox Code Playgroud)


Sat*_*amy 5

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

如果它是空的,那么尝试如下

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
protoc --go_out=plugins=grpc:. *.proto
Run Code Online (Sandbox Code Playgroud)