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

我是 golang 的新手,想尝试使用 grpc 代码来更好地理解它。为此,我遵循了此处显示的示例:


https://devicharan.wordpress.com/


源代码在这里:https : //github.com/devicharan/basicwebapp


不幸的是,当我运行此代码并执行 go build 时,我收到一条错误消息,其中包含以下内容:


# basicwebapp/proto

proto/CatalogService.pb.go:126: cannot use _CatalogService_GetProductCatalog_Handler (type func(interface {},   context.Context, []byte) (proto.Message, error)) as type grpc.methodHandler in field value

proto/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 调试器吗?


哈士奇WWW
浏览 178回答 3
3回答

翻翻过去那场雪

基本上你的 protoc-gen-go 与 grpc 的版本不匹配。因此,将它们同步到最新版本并重新安装 protoc-gen-go 将解决问题:go get -u github.com/golang/protobuf/cd github.com/golang/protobuf/makego get -u github.com/grpc/grpc-go

慕斯709654

对于遇到同样问题的任何人,我所做的只是改变了我构建 proto 文件的方式。博客页面上有一条评论突出显示了一些缺失的步骤,我按照它并执行以下 protoc 命令从 proto 文件生成代码:protoc --go_out=plugins=grpc:. *.proto我在包含 proto 文件的目录中运行了此命令,然后在我的 main.go 文件上进行了构建,现在一切正常。

月关宝盒

我遇到了同样的问题,重新安装或新命令似乎不起作用。然而:如果你改变codec grpc.Codec, buf []byte在 Handler 定义中变成:dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor和codec.Unmarshal(buf, in)进入dec(in)(全部在 .pb.go 文件中的处理程序定义中)它似乎工作。更改此文件当然不是最佳选择,每次重新编译时它都会覆盖您的更改,但至少有一个解决方法,直到我弄清楚我搞砸了什么。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go