2013-03-03 95 views
4

我想通过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.Approach与采空区。但在运行我正在接受的主程序

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

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

回答

1

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

3

是的,你已经注册了node.Approach与gob。但那么你通过q,其中不是node.Approach。改为发送p,因为它具有您已注册的类型。