jsonrpc包目前不支持 json-rpc over HTTP。所以,你不能用那个,对不起。
但是jsonrpc 规范非常简单,编写自己的jsonrpchttp
(哦,我希望你知道一个更好的名称)包可能很容易。
我能够使用以下(可怕的)代码成功调用“getinfo”:
package main
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
data, err := json.Marshal(map[string]interface{}{
"method": "getinfo",
"id": 1,
"params": []interface{}{},
})
if err != nil {
log.Fatalf("Marshal: %v", err)
}
resp, err := http.Post("http://bob:secret@127.0.0.1:8332",
"application/json", strings.NewReader(string(data)))
if err != nil {
log.Fatalf("Post: %v", err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalf("ReadAll: %v", err)
}
result := make(map[string]interface{})
err = json.Unmarshal(body, &result)
if err != nil {
log.Fatalf("Unmarshal: %v", err)
}
log.Println(result)
}
也许你可以通过实现rpc.ClientCodec接口来清理它(参见jsonrpc/client.go的例子)。然后你可以利用 Go 的rpc包。