名称未为接口注册

我正在尝试通过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 = p


var reply int

err = client.Call("RPCMethod.RPCAction",&q, &reply)

我已经注册了node.gob方法。但是在运行主程序时我会收到


gob: name not registered for interface: "node.Approach"

关于我在做什么错的任何想法吗?或如何注册名称?


精慕HU
浏览 191回答 2
2回答

侃侃无极

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

墨色风雨

是的,您已经node.Approach在采空区注册了。但是然后你通过了q,事实并非如此 node.Approach。请发送p,因为它具有您注册的类型。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go