go標準庫RPC

// server端type HelloService struct{}// 方法只能有兩個可序列化的引數,其中第二個引數是指標型別,並且返回一個error型別,同時必須是公開的方法// func (t *T) MethodName(argType T1, replyType *T2) errorfunc (s *HelloService) Hello(in string, out *string) error { *out = “hello:” + in return nil}func main() { //rpc。Register(new(HelloService)) // rpc。Register 用於註冊RPC服務, 預設名字是物件的型別名字(這裡是HelloService) rpc。RegisterName(“HelloService”, new(HelloService)) // RegisterName用於指定指定特殊的名字 l, err := net。Listen(“tcp”, “:8090”) if nil != err { log。Fatal(“Listen error:”, err) } for { c, err := l。Accept() if err != nil { log。Fatal(“Accept error:”, err) } rpc。ServeConn(c) }}// client端func main() { // 連結RPC服務 c, err := rpc。Dial(“tcp”, “localhost:8090”) if err != nil { log。Fatal(“Dial:”, err) } var reply string // 第一個引數是連結的RPC服務名字和方法名字,第二和第三個引數分別是定義的RPC方法的兩個引數 err = c。Call(“HelloService。Hello”, “share”, &reply) if err != nil { log。Fatal(err) } fmt。Println(reply)}