2013-07-17 77 views
2

我编写了一个简单的JSONRPC服务器来测试Go的功能,但是我被卡住了,总是得到一个空的结果,没有错误和正确的ID。我有以下Go代码: 包主要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 

对发生了什么事情有任何想法?我使用的是围棋的最新的稳定版本,V1.1.1

感谢

回答

5

您的答复是指针类型的字符串。这是可以的,甚至需要使用第二个参数来返回答案。但你这样做:

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

翻译为:

  • 构造一个新值一个新的字符串。
  • 让回复点这个新的字符串

这让被返回完全不受影响的字符串。 尝试

*reply = s 
+0

哼,太好了!我应该学习一些指针,因为这是我的第一次用这种语言进行的尝试。我现在还不能满足,但会迟一点。感谢您花时间解释! – Paulo