Go语言学习之JSON RPC
2017-06-21 20:56
309 查看
server
package main import ( "errors" "fmt" "net" "net/rpc" "net/rpc/jsonrpc" "os" ) type Args struct { A, B int } func checkError(err error) { if err != nil { fmt.Fprint(os.Stderr, "Usage: %s", err.Error()) os.Exit(1) } } type Quotient struct { Quo, Rem int } type Arith int func (t *Arith) Muliply(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", ":1234") checkError(err) Listener, err := net.ListenTCP("tcp", tcpAddr) checkError(err) for { conn, err := Listener.Accept() if err != nil { fmt.Fprint(os.Stderr, "accept err: %s", err.Error()) continue } jsonrpc.ServeConn(conn) } }
client
package main import ( "fmt" "net/rpc/jsonrpc" "os" ) type Args struct { A, B int } type quo struct { Quo, Rem int } func main() { service := "127.0.0.1:1234" client, err := jsonrpc.Dial("tcp", service) if err != nil { fmt.Println("dial error:", err) os.Exit(1) } args := Args{1, 2} var reply int err = client.Call("Arith.Muliply", args, &reply) if err != nil { fmt.Println("Arith.Muliply call error:", err) os.Exit(1) } fmt.Println("the arith.mutiply is :", reply) var quto quo err = client.Call("Arith.Divide", args, &quto) if err != nil { fmt.Println("Arith.Divide call error:", err) os.Exit(1) } fmt.Println("the arith.devide is :", quto.Quo, quto.Rem) }
相关文章推荐
- go语言学习-json 解析
- Hyperledger fabric 学习笔记: go语言 与 JSON
- GO语言学习:JSON处理
- Go语言学习之encoding/json包(The way to go)
- go语言学习及json学习
- JSON-RPC-Java学习之类型映射及js客户端调用
- JSON-RPC-Java学习之JSON-RPC specifications
- go语言学习-golang的基本数据类型
- go语言学习-golang保留字
- Go语言学习笔记2——数组和Slice
- 学习go语言 我的习题答案 chapter3
- go语言学习:搭建go环境
- Go语言学习札记——第三章 Go基本的程序设计结构(1)
- go语言学习记录3
- JSON-RPC-Java学习之JSON-RPCspecificationsWeb服务器教程
- go 语言学习记录1
- JSON-RPC-Java 学习之体系结构介绍
- go语言学习-在ubuntu上安装golang
- Go语言学习札记—— 第二章 Go编程环境(2)
- Go语言_基础学习篇