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

名称未为接口注册

名称未为接口注册

Go
精慕HU 2021-05-19 18:21:39
我正在尝试通过RPC发送具体的实现。RPC 方法需要一个接口。相关代码段为:包装内node:type Commander interface {    Action() string   }type Approach struct {    Position int   }func (p Approach) Action() string {    return "Approach"   }func (t *RPCMethod) RPCAction(command Commander, reply *int) error {    // RPC Method}包装内main:import "node"gob.Register(node.Approach{})var p = node.Approach{position}var q node.Commander = pvar reply interr = client.Call("RPCMethod.RPCAction",&q, &reply)我已经注册了node.gob方法。但是在运行主程序时我会收到gob: name not registered for interface: "node.Approach"关于我在做什么错的任何想法吗?或如何注册名称?
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

正如我在邮件列表中回答的那样,您将需要在解码端注册类型。在这种情况下,那就是RPC服务器端。gob编码器正在使用反射来检查结构和接口,但是解码器端必须预先知道接口内部可能存储什么类型,因为通过电线传输的唯一东西是名称,并且它必须已经看到了该类型。第一的。


查看完整回答
反对 回复 2021-05-31
?
墨色风雨

TA贡献1853条经验 获得超6个赞

是的,您已经node.Approach在采空区注册了。但是然后你通过了q,事实并非如此 node.Approach。请发送p,因为它具有您注册的类型。


查看完整回答
反对 回复 2021-05-31
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

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