[英]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.