rpc服务端server.go

注册服务对外提供服务

package main

import (
	"fmt"
	"math"
	"net"
	"net/http"
	"net/rpc"
)
//定义接受者,可以实例化暴露对象
//定义接收者的方法,也是为远程提供的方法
//实例化结构体对象
//注册为rpc服务
//rcp注册到http请求协议
//启动服务监听对外提供服务
type CalculatedArea struct {
}

func (c *CalculatedArea) Add(req float32, resp *float32) error {
	*resp = math.Pi * req * req
	return nil
}
func main() {
	calculatedArea := new(CalculatedArea)
	err := rpc.Register(calculatedArea)

	defer func() {
		if r := recover(); r != nil {
			fmt.Print(r)
		}
	}()
	if err != nil {
		panic(err.Error())
	}
	rpc.HandleHTTP()
	listen, err := net.Listen("tcp", "localhost:9080")
	if err != nil {
		panic(err.Error())
	}
	http.Serve(listen, nil)
}

rpc客户端,请求远端rpc服务提供的方法

package main

import (
	"fmt"
	"net/rpc"
)

//1、建立连接,连接到服务端
//2、定义传参,与服务端逻辑入参一致
//3、调用远程方法
//4、使用远程方法计算结果

func main() {
	client, err := rpc.DialHTTP("tcp", "localhost:9080")
	if err != nil {
		panic(err.Error())
	}
	//定义传参数与接收值
	var req = 24.0
	var resq *float32
	err = client.Call("CalculatedArea.Add", req, &resq)
	if err != nil {
		panic(err.Error())
	}
	fmt.Print(*resq)

}
//结果1809.5574