2013-03-03 111 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,因爲它具有您已註冊的類型。

相關問題