上海兄弟连IT培训学校

156-1805-0504

兄弟连区块链技术培训分享Go语言之RPC使用

编辑:上海兄弟连IT培训学校时间:2019-08-14

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

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

一 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)

}


上一篇:兄弟连Go语言培训分享Go协程测试

下一篇:PHP语言好不好?优势在哪里?

联系方式

选择专业时,如果犹豫不定,不知道选择哪个比较好,敬请致电,专业的咨询老师会为你解答。

  • 报名热线:156-1805-0504
  • 咨询老师:张老师
  • 点击咨询:

友情连接:

关于我们|联系我们|网站地图

QQ咨询
在线咨询
在线报名
156-1805-0504
返回顶部