5

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)

ノードを登録しました。ゴブでアプローチします。しかし、私が受け取っているメインプログラムを実行すると

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

私が間違っていることについて何か考えはありますか?または名前を登録する方法は?

4

2 に答える 2

4

はい、あなたはnode.Approachゴブに登録しました。しかし、あなたは合格しますがq、それはそうではありません node.Approachp代わりに送信してください。これは、登録したタイプであるためです。

于 2013-03-03T14:59:44.067 に答える
1

メーリングリストで答えたように、デコード側でタイプを登録する必要があります。この場合、それはRPCサーバー側です。ゴブエンコーダーはリフレクションを使用して構造とインターフェイスを調べますが、ワイヤーを介して送信されるのは名前だけであり、タイプをすでに確認している必要があるため、デコーダー側はインターフェイス内に格納されるタイプを事前に知っている必要があります最初。

于 2013-03-03T20:46:00.557 に答える