2013-03-03 3 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 서버 쪽입니다. 몹 인코더는 구조와 인터페이스를 검사하기 위해 리플렉션을 사용하지만, 디코더 측은 와이어를 통해 전송되는 유일한 것만이 이름이기 때문에 어떤 유형이 인터페이스 내에 저장 될지 미리 알아야합니다. 이미 유형을 보았습니다 먼저.

3

예,을 멍에와 함께 등록했습니다. 하지만 q을 전달하면 node.Approach이 아닙니다. 등록한 유형이 있기 때문에 p을 대신 보내주십시오.

관련 문제