培训首页  >  web前端新闻  >  兄弟连分享Go语言培训分享之RPC使用

兄弟连分享Go语言培训分享之RPC使用

[2018-08-28 14:14:23] 浏览量:119 来源:

北京兄弟连IT

  Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。

 

  兄弟连Go语言+区块链培训课程共计22周学习时长,划分为9个学习阶段,即区块链主流语言-Go语言开发实战、区块链后端技术体系-Go语言高并发和服务器开发、Go开发区块链公链(区块链密码学、分布式编程、共识算法、基本概念,Golan公链开发)、以-太 坊与智能合约与DAPP开发、区块链分布式应用开发、区块链系统框架开发-超级账本与区块链3.0EOSGo与区块链面试强化和高级企业级项目实战。

 HTTP RPC

服务端代码

 

package main

 

import (

"errors"

"fmt"

"net/http"

"net/rpc"

)

 

const (

    

)

 

type Args struct {

    A, B int

}

 

type Quotient struct {

    Quo, Rem int

}

 

type Arith int

 

func (t *Arith) Multiply(args *Args, reply *int) error {

    *reply = args.A * args.B

    return nil

}

func (t *Arith) Divide(args *Args, quo *Quotient) error{

    if args.B == 0 {

        return errors.New("divide by zero!")

    }

 

    quo.Quo = args.A / args.B

    quo.Rem = args.A % args.B

 

    return nil

}

func main() {

 

    arith := new(Arith)

    rpc.Register(arith)

    rpc.HandleHTTP()

 

    err := http.ListenAndServe(URL, nil)

    if err != nil {

        fmt.Println(err.Error())

    }

}

 

客户端代码

 

package main

 

import (

    "fmt"    

    "net/rpc

)

 

const (

    

)

 

func main() {

 

    client, err := rpc.DialHTTP("tcp", URL)

    if err != nil {

        fmt.Println(err.Error())

    }

 

    args := Args{2, 4}

    var reply int

    err = client.Call("Arith.Multiply", &args, &reply)

 

    if err != nil {

        fmt.Println(err.Error())

    } else {

        fmt.Println(reply)

    }

}   

 

 JSON-RPC

服务器端代码

 

package main

 

import (

"errors"

"fmt"

"net"

"net/rpc"

"net/rpc/jsonrpc"

)

 

const (

    

)

 

type Args struct {

    A, B int

}

type Quotient struct {

    Quo, Rem int

}

 

type Arith int

 

func (t *Arith) Multiply(args *Args, reply *int) error {

    *reply = args.A * args.B

    return nil

}

func (t *Arith) Divide(args *Args, quo *Quotient) error {

    if args.B == 0 {

        return errors.New("divide by zero!")

    }

 

    quo.Quo = args.A / args.B

    quo.Rem = args.A % args.B

 

    return nil

}

func main() {

 

    arith := new(Arith)

    rpc.Register(arith)

 

    tcpAddr, err := net.ResolveTCPAddr("tcp", URL)

    if err != nil {

        fmt.Println(err)

    }

    listener, err := net.ListenTCP("tcp", tcpAddr)

 

    for {

        conn, err := listener.Accept()

        if err != nil {

            continue

        }

        go jsonrpc.ServeConn(conn)

    }

}

 

客户端代码

 

package main

 

import (

    "fmt"    

    "net/rpc

)

 

const (

    

)

 

func main() {

 

    client, err := jsonrpc.Dial("tcp", URL)

    defer client.Close()

 

    if err != nil {

        fmt.Println(err)

    }

 

    args := Args{7, 2}

    var reply int

    err = client.Call("Arith.Multiply", &args, &reply)

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(reply)  

}

文中图片素材来源网络,如有侵权请联系删除
  • 软件开发
  • 软件测试
  • 数据库
  • Web前端
  • 大数据
  • 人工智能
  • 零基础
  • 有HTML基础
  • 有PHP基础
  • 有C语言基础
  • 有JAVA基础
  • 其他计算机语言基础
  • 周末班
  • 全日制白班
  • 随到随学

网上报名

热门信息