我是 golang 的新手,想嘗試使用 grpc 代碼來更好地理解它。為此,我遵循了此處顯示的示例:https://devicharan.wordpress.com/源代碼在這里:https : //github.com/devicharan/basicwebapp不幸的是,當我運行此代碼并執(zhí)行 go build 時,我收到一條錯誤消息,其中包含以下內容:# basicwebapp/protoproto/CatalogService.pb.go:126: cannot use _CatalogService_GetProductCatalog_Handler (type func(interface {}, context.Context, []byte) (proto.Message, error)) as type grpc.methodHandler in field valueproto/RecommendationService.pb.go:99: cannot use _RecommendationService_GetRecommendations_Handler (type func(interface {}, context.Context, []byte) (proto.Message, error)) as type grpc.methodHandler in field value我不知道這意味著什么,或者我需要改變什么才能開始尋找修復。是代碼本身有問題還是我的 Go 配置有問題?另外,有人可以推薦一個很好的 Go 調試器嗎?
3 回答

翻翻過去那場雪
TA貢獻2065條經(jīng)驗 獲得超14個贊
基本上你的 protoc-gen-go 與 grpc 的版本不匹配。因此,將它們同步到最新版本并重新安裝 protoc-gen-go 將解決問題:
go get -u github.com/golang/protobuf/
cd github.com/golang/protobuf/
make
go get -u github.com/grpc/grpc-go

慕斯709654
TA貢獻1840條經(jīng)驗 獲得超5個贊
對于遇到同樣問題的任何人,我所做的只是改變了我構建 proto 文件的方式。博客頁面上有一條評論突出顯示了一些缺失的步驟,我按照它并執(zhí)行以下 protoc 命令從 proto 文件生成代碼:
protoc --go_out=plugins=grpc:. *.proto
我在包含 proto 文件的目錄中運行了此命令,然后在我的 main.go 文件上進行了構建,現(xiàn)在一切正常。

月關寶盒
TA貢獻1772條經(jīng)驗 獲得超5個贊
我遇到了同樣的問題,重新安裝或新命令似乎不起作用。
然而:如果你改變
codec grpc.Codec, buf []byte
在 Handler 定義中變成:
dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor
和
codec.Unmarshal(buf, in)
進入
dec(in)
(全部在 .pb.go 文件中的處理程序定義中)
它似乎工作。
更改此文件當然不是最佳選擇,每次重新編譯時它都會覆蓋您的更改,但至少有一個解決方法,直到我弄清楚我搞砸了什么。
- 3 回答
- 0 關注
- 212 瀏覽
添加回答
舉報
0/150
提交
取消