2013-07-17 3 views
2

Go의 기능을 테스트하기 위해 간단한 JSONRPC 서버를 코딩했는데, 항상 오류가 발생하고 올바른 ID가없는 빈 결과가 나타납니다. 나는 다음과 같은 이동 코드를 가지고 : 주요 패키지를JSONRPC 서버가 빈 결과를 반환합니다.

import (
    "log" 
    "net" 
    "net/rpc" 
    "net/rpc/jsonrpc" 
) 

type Experiment int 

func (e *Experiment) Test(i *string, reply *string) error { 
    s := "Hello, " + *i 
    reply = &s 
    log.Println(s, reply) 
    return nil 
} 

func main() { 
    exp := new(Experiment) 
    server := rpc.NewServer() 
    server.Register(exp) 
    l, err := net.Listen("tcp", ":1234") 
    if err != nil { 
     log.Fatal("listen error:", err) 
    } 
    for { 
     conn, err := l.Accept() 
     if err != nil { 
      log.Fatal(err) 
     } 
     server.ServeCodec(jsonrpc.NewServerCodec(conn)) 
    } 
} 

상관없이 내가 뭘하려합니다, 나는 항상 다음과 같은 응답이 없어했습니다

{"id":1,"result":"","error":null} 

로깅은 모든 것이이 글은 정상적으로 작동하고 보여줍니다 서버.

2013/07/17 15:17:13 Hello, Paulo 0xc200090ac0 

무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까? 나는

답변

5

회신이 문자열 타입의 포인터이다 이동의 최신 안정 버전, V1.1.1

감사를 사용하고 있습니다. 두 번째 인수가 대답을 반환하는 데 사용되므로 괜찮습니다. 그러나 당신이 할 :

  • 새로운 값을 가진 새로운 캐릭터 라인을 구축 :

    s := "Hello, " + *i 
    reply = &s 
    

    로 변환한다.

  • 하자이 새로운 문자열

이 완전히 영향을받지 반환되는 문자열을 할 수 있습니다에 포인트를 회신 할 수 있습니다. 시도

*reply = s 
+0

흠, 잘됐다! 나는 포인터를 조금 연구해야하는데, 이것은 이것이 처음으로 언어로 시작된다는 것입니다. 나는 아직 upvote 수 없지만 나중에 것입니다. 설명 할 시간을내어 주셔서 감사합니다! – Paulo

관련 문제