服务端
package main
import (
"fmt"
"net/http"
"net/rpc"
)
type Params struct {
Width, Height int
}
type Rect struct{}
func (r *Rect) Area(p Params, ret *int) error {
*ret = p.Width * p.Height
return nil
}
func (r *Rect) Perimeter(p Params, ret *int) error {
*ret = (p.Width + p.Height) * 2
return nil
}
func main() {
var rect Rect
if err := rpc.Register(&rect); err != nil {
fmt.Println(err)
return
}
rpc.HandleHTTP()
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println(err)
return
}
}
客户端
package main
import (
"fmt"
"net/rpc"
"testing"
)
func TestRPC(t *testing.T) {
rpc, err := rpc.DialHTTP("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println(err)
return
}
ret := 0
err = rpc.Call("Rect.Area", Params{50, 100}, &ret)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("result:%d", ret)
}