May*_*pta 26 go protocol-buffers proto grpc protoc
我正在尝试使用 go grpc 构建示例应用程序,但无法使用“protoc”生成代码
已使用以下方法安装了所需的库/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
来自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)
环境
小智 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}
vim ~/.bash_profile
export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin
Run Code Online (Sandbox Code Playgroud)
source ~/.bash_profile
小智 12
他们在上面评论说必须添加以下包
sudo apt install protobuf-compiler
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我还必须添加这个..
sudo apt install golang-goprotobuf-dev
Run Code Online (Sandbox Code Playgroud)
从 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
以防万一如果其他人仍然面临这个问题,请尝试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)
这对我有用。
用于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)
对于设置 GOPATH
和GOROOT
,请按照以下步骤操作:
但是,首先,运行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
文件以添加以下行来设置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
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)
确保在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)