JSONRPC服务器返回空结果

时间:2013-07-17 18:23:39

标签: json go rpc

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

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

关于发生了什么的任何想法?我使用的是最新的稳定版Go,v1.1.1

由于

1 个答案:

答案 0 :(得分:4)

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

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

转换为:

  • 使用新值构造一个新字符串。
  • 让我们回复指向这个新字符串

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

*reply = s