go RPC 包文档
通过 go 自带的 net/rpc
包可以很容易实现 RPC。go 官方文档对 RPC 服务端方法的要求如下:
net/rpc
包实现 RPCGo 自带的 rpc 包,在编解码时使用了 Gob (Go binary)编码,导致无法跨平台。可以替换为通用的 Protobuf 或 JSON 格式,从而有更好的跨语言能力。
package main
import (
"net"
"net/http"
"net/rpc"
)
type Args struct {
A, B int
}
type MyStruct int
func (my *MyStruct) Test(args Args, reply *int) error {
*reply = args.A * args.B
return nil
}
func main() {
ms := new(MyStruct)
rpc.Register(ms)
rpc.HandleHTTP()
l, e := net.Listen("tcp", ":1234")
if e != nil {
panic(e)
}
http.Serve(l, nil)
}
package main
import (
"fmt"
"net/rpc"
)
type Args struct {
A, B int
}
func main() {
client, err := rpc.DialHTTP("tcp", ":1234")
if err != nil {
panic(err)
}
var reply int
err = client.Call("MyStruct.Test", &Args{2, 3}, &reply)
if err != nil {
panic(err)
}
fmt.Println(reply)
}