2013-07-17 114 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