JSONRPC 服务器返回空结果

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


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


芜湖不芜
浏览 207回答 1
1回答

PIPIONE

您的回复是指向字符串的指针类型。这是可以的,甚至是必需的,因为第二个参数用于返回答案。但是你这样做:s := "Hello, " + *i reply = &s翻译成:构造一个具有新值的新字符串。让回复指向这个新字符串这让返回的字符串完全不受影响。尝试*reply = s
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go