我是 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
慕斯709654
TA贡献1840条经验 获得超5个赞
对于遇到同样问题的任何人,我所做的只是改变了我构建 proto 文件的方式。博客页面上有一条评论突出显示了一些缺失的步骤,我按照它并执行以下 protoc 命令从 proto 文件生成代码:
protoc --go_out=plugins=grpc:. *.proto
我在包含 proto 文件的目录中运行了此命令,然后在我的 main.go 文件上进行了构建,现在一切正常。
月关宝盒
TA贡献1772条经验 获得超5个赞
我遇到了同样的问题,重新安装或新命令似乎不起作用。
然而:如果你改变
codec grpc.Codec, buf []byte
在 Handler 定义中变成:
dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor
和
codec.Unmarshal(buf, in)
进入
dec(in)
(全部在 .pb.go 文件中的处理程序定义中)
它似乎工作。
更改此文件当然不是最佳选择,每次重新编译时它都会覆盖您的更改,但至少有一个解决方法,直到我弄清楚我搞砸了什么。
- 3 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消