簡體   English   中英

錯誤“protoc-gen-go:程序未找到或不可執行”

[英]Error "protoc-gen-go: program not found or is not executable"

我正在嘗試使用 Go gRPC構建示例應用程序,但我無法使用“protoc”生成代碼

我已經使用以下方法安裝了所需的庫和 Go 包:

  1. go get -u google.golang.org/grpc
  2. 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}
  1. 運行vim ~/.bash_profile
  2. 添加:
     export GO_PATH=~/go export PATH=$PATH:/$GO_PATH/bin
  3. 運行source ~/.bash_profile

參考: 無法構建 protobuf 去端點

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"

這對我有用。

去 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

安裝

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

設置GOPATHGOROOT ,請按照以下步驟操作:

但是,首先,運行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文件以添加以下行來設置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

如果你使用 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}

解決方案是將binpkg文件夾中的所有文件移動到您當前的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 權限並按照以下步驟操作。 這讓我擺脫了困境

  1. git clone https://github.com/micro/protoc-gen-micro.git /usr/local/go/bin/src/github.com/micro/protoc-gen-micro
  2. cd src/github.com/micro/protoc-gen-micro
  3. 去建造
  4. cp protoc-gen-micro /bin

快樂編碼!

安裝 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM