深圳网站关键词优化,网站如何做后台,天门网站网站建设,wordpress资料图片本文实例讲述了golang两种调用rpc的方法。分享给大家供大家参考#xff0c;具体如下#xff1a;golang的rpc有两种方法进行调用#xff0c;一种是rpc例子中给的#xff1a;package mainimport (net/rpcnet/httplognet具体如下golang的rpc有两种方法进行调用一种是rpc例子中给的package mainimport (net/rpcnet/httplognettime)type Args struct {A, B int}type Arith intfunc (t *Arith) Multiply(args *Args, reply *([]string)) error {*reply append(*reply, test)return nil}func main() {arith : new(Arith)rpc.Register(arith)rpc.HandleHTTP()l, e : net.Listen(tcp, :1234)if e ! nil {log.Fatal(listen error:, e)}go http.Serve(l, nil)time.Sleep(5 * time.Second)client, err : rpc.DialHTTP(tcp, 127.0.0.1 :1234)if err ! nil {log.Fatal(dialing:, err)}args : Args{7,8}reply : make([]string, 10)err client.Call(Arith.Multiply, args, reply)if err ! nil {log.Fatal(arith error:, err)}log.Println(reply)}另一种是使用NewServer这种是当rpc已经注册的时候就要使用了另外一种了。即一个server只能在DefaultRPC中注册一种类型。当Server使用rpc.NewServer的时候client也需要进行下改动了package mainimport (net/rpc//net/httplognettime)type Args struct {A, B int}type Arith intfunc (t *Arith) Multiply(args *Args, reply *([]string)) error {*reply append(*reply, test)return nil}func main() {newServer : rpc.NewServer()newServer.Register(new(Arith))l, e : net.Listen(tcp, 127.0.0.1:1234) // any available addressif e ! nil {log.Fatalf(net.Listen tcp :0: %v, e)}go newServer.Accept(l)newServer.HandleHTTP(/foo, /bar)time.Sleep(2 * time.Second)address, err : net.ResolveTCPAddr(tcp, 127.0.0.1:1234)if err ! nil {panic(err)}conn, _ : net.DialTCP(tcp, nil, address)defer conn.Close()client : rpc.NewClient(conn)defer client.Close()args : Args{7,8}reply : make([]string, 10)err client.Call(Arith.Multiply, args, reply)if err ! nil {log.Fatal(arith error:, err)}log.Println(reply)}第二个例子中的newServer.HandleHTTP(/foo, /bar)可以任意设置第一个例子其实是设置了默认的两个这里也顺便将reply作为[]slice的例子给演示了下希望本文所述对大家Go语言程序设计有所帮助。