ShowProgramCode

2022年7月8日 星期五

goLang grpc 安裝問題proto或protoc-gen-go不是可執行的程式

最近被要求寫一個grpc base的server範例,之後可能需要用到。

基本上範例所有動作都是參考下面網址:

https://pjchender.dev/golang/grpc-getting-started/


但是針對這個網址的說明,對我而言不明確的部分,加上紀錄。以防止下一次需要用到相關功能時,發生相同的問題。

一、 'protoc' 不是內部或外部命令、可執行的程式或批次檔。

首先剛開始時我沒有找到上面的網址,所以我先執行了go get -u google.golang.org/grpc、go get github.com/golang/protobuf/protoc-gen-go。執行go get github.com/golang/protobuf/protoc-gen-go時還發生另一個錯誤,go get github.com/golang/protobuf/protoc-gen-go已經不使用了,要求我改用google.golang.org/protobuf。

然後我照了另外一篇文章的說明,先寫proto檔案,在檔案路徑下執行protoc *.proto --go_out=plugins=grpc:. --go_opt=paths=source_relative,就出現了上面的錯誤: 'protoc' 不是內部或外部命令、可執行的程式或批次檔。

這個比較簡單,因為我沒有安裝protoc,另外最上方網址的文章提供的指令並非window使用的,我參考了下面網址,先解壓縮資料夾後,放入我慣用的路徑,最後在去環境變數中設定PATH,執行protoc --version就正常可以使用了。

https://hoohoo.top/blog/mac-linux-windows-install-protocol-buffer-protobuf-compiler-way/


 二、'protoc-gen-go' 不是內部或外部命令、可執行的程式或批次檔。

這個就比較麻煩了,當protoc安裝完畢,我再次在檔案路徑下執行protoc *.proto --go_out=plugins=grpc:. --go_opt=paths=source_relative,就出現了上面的錯誤:'protoc-gen-go' 不是內部或外部命令、可執行的程式或批次檔。

我花了不少時間查詢,包含改變環境參數中的PATH、GOPATH...,都沒有成功執行指令,最終我查到了下面的網址,將GOPATH下bin的檔案copy一份到GOROOT的bin底下就成功了(汗)@@

https://icode.best/i/35480546158182

但有個地方和上方網址的說明不同,protoc-gen-go.exe檔案有,protoc-gen-go-grpc.exe檔案是沒有的,可能因為我安裝的並非github.com/golang/protobuf/protoc-gen-go版本。

不過目前為止,我的測試範本的Server功能可正常執行,之後如果有問題將再繼續補充。