如果咱们想在服务端为客户端提供一个打印一个输出字段的服务,借助net/rpc,咱们能够这样实现:

服务端

package mainimport (    "log"    "net"    "net/rpc")//结构一个类 名字是HelloServicetype HelloService struct{}//给这个类绑定一个Hello办法 实现打印的性能,这个办法只能有两个可序列化的参数,其中第二个参数是指针类型,并且返回一个error类型,同时必须是公开的办法func (item *HelloService) Hello(req string, reply *string) error {    *reply = "server-hello  " + req    return nil}func main() {    //将HelloService的对象注册为一个RPC服务    rpc.RegisterName("HelloService", new(HelloService))    listener, err := net.Listen("tcp", ":1234")    if err != nil {        log.Fatal("ListenTCP error:", err)    }    //建设一个惟一的TCP链接,并且通过rpc.ServeConn函数在该TCP链接上为对方提供RPC服务。    conn, err := listener.Accept()    if err != nil {        log.Fatal("Accept error:", err)    }    rpc.ServeConn(conn)}

客户端

package mainimport (    "fmt"    "log"    "net/rpc")func main() {    //通过rpc.Dial拨号RPC服务    client, err := rpc.Dial("tcp", "localhost:1234")    if err != nil {        log.Fatal("dialing", err)    }    var reply string    //通过client.Call调用具体的RPC办法    //在调用client.Call时,第一个参数是用点号链接的RPC服务名字和办法名字,    //第二和第三个参数别离咱们定义RPC办法的两个参数。    err = client.Call("HelloService.Hello", " client-Hello", &reply)    if err != nil {        log.Fatal(err)    }    fmt.Println(reply)}

运行后果:

server-hello   client-Hello
参考: https://chai2010.cn/advanced-...