为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 grpc 方法处理程序解决此问题

如何使用 grpc 方法处理程序解决此问题

Go
哈士奇WWW 2021-11-22 10:40:50
我是 golang 的新手,想尝试使用 grpc 代码来更好地理解它。为此,我遵循了此处显示的示例:https://devicharan.wordpress.com/源代码在这里:https : //github.com/devicharan/basicwebapp不幸的是,当我运行此代码并执行 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条经验 获得超13个赞

基本上你的 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


查看完整回答
反对 回复 2021-11-22
?
慕斯709654

TA贡献1840条经验 获得超5个赞

对于遇到同样问题的任何人,我所做的只是改变了我构建 proto 文件的方式。博客页面上有一条评论突出显示了一些缺失的步骤,我按照它并执行以下 protoc 命令从 proto 文件生成代码:

protoc --go_out=plugins=grpc:. *.proto

我在包含 proto 文件的目录中运行了此命令,然后在我的 main.go 文件上进行了构建,现在一切正常。


查看完整回答
反对 回复 2021-11-22
?
月关宝盒

TA贡献1772条经验 获得超5个赞

我遇到了同样的问题,重新安装或新命令似乎不起作用。

然而:如果你改变

codec grpc.Codec, buf []byte

在 Handler 定义中变成:

dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor

codec.Unmarshal(buf, in)

进入

dec(in)

(全部在 .pb.go 文件中的处理程序定义中)

它似乎工作。

更改此文件当然不是最佳选择,每次重新编译时它都会覆盖您的更改,但至少有一个解决方法,直到我弄清楚我搞砸了什么。


查看完整回答
反对 回复 2021-11-22
  • 3 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信