我正在尝试使用go grpc构建示例应用程序,但无法使用“协议”生成代码
已使用以下方法安装了所需的库/运行包:
也尝试设置路径,但是没有运气。
“原型”文件示例:
syntax = "proto3";
package greet;
option go_package="greetpb";
service GreetService{}
错误消息: “ protoc-gen-go:找不到程序或不可执行 --go_out:protoc-gen-go:插件失败,状态码为1。“
答案 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
答案 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
要设置设置 GOPATH
和 GOROOT
,请按照以下步骤操作:
但是,首先,运行 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
文件以添加以下行来设置 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
答案 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}
答案 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{}