Server

  1. 创建要导出的接口对象:new(API)
  2. 注册接口:rpc.Register(api)
  3. 创建网络监听端口:net.Listen(protocol, addr)
  4. 托管客户端请求处理:rpc.Accept()
package main

import (
	"fmt"
	"log"
	"net"
	"net/rpc"
)

type Test struct {}

func (*Test) Inc(in int32, out *int32) error {
	*out = in + 1
	return nil
}

func (*Test) Hi(in string, out *string) error {
	*out = fmt.Sprintf("Hello,%s!\n", in)
	return nil
}

func main() {
	test := new(Test)
	rpc.Register(test)
	ln, err := net.Listen("tcp", ":2018")
	if err != nil {
		log.Fatal("Listen() failed", err)
	}
	rpc.Accept(ln)
}

Client

package main

import (
	"fmt"
	"log"
	"net/rpc"
)

func main() {
	cli, err := rpc.Dial("tcp", "localhost:2018")
	if err != nil {
		log.Fatal("Dial() failed", err)
	}
	var ret int32
	err = cli.Call("Test.Inc", 2018, &ret)
	if err != nil {
		log.Fatal("Call() failed", err)
	}
	fmt.Printf("Result: %d\n", ret)
	var ret2 string
	err = cli.Call("Test.Hi", "weicky", &ret2)
	if err != nil {
		log.Fatal("Call() failed", err)
	}
	fmt.Printf("Result: %s\n", ret2)
}