package main import ( "net" "net/rpc" "gitlab.com/go-course-project/go17/skills/rpc/hello_world/service" ) var _ service.HelloService = (*HelloServiceServer)(nil) // 实现业务功能 // req := &HelloRequest{} // resp := &HelloResponse{} // err := &HelloServiceServer{}.Hello(req, resp) // net/rpc // 1. 写好的对象, 注册给RPC Server // 2. 再把RPC Server 启动起来 type HelloServiceServer struct { } // HTTP Handler func (h *HelloServiceServer) Hello(request *service.HelloRequest, response *service.HelloResponse) error { response.Message = "hello:" + request.MyName return nil } func main() { // 1. 把业务 注册给RPC // 2. RPC 业务RPC必须是满足条件的接口: (req any, req any) error // Hello(request *HelloRequest, response *HelloResponse) error if err := rpc.RegisterName("HelloService", &HelloServiceServer{}); err != nil { panic(err) } // 启动RPC服务 listener, err := net.Listen("tcp", ":1234") if err != nil { panic(err) } defer listener.Close() for { conn, err := listener.Accept() if err != nil { continue } // 用户的net层数据 转交给 rpc框架 go rpc.ServeConn(conn) } }