golang beego框架学习(十)

AndyYang| 阅读:1221 发表时间:2017-04-30 18:00:06 golang
摘要:本章节主要讲解Go语言如何实现简易的rpc通讯。

本章节主要讲解Go语言如何实现简易的rpc通讯。实现方式有http、tcp、json,本文只讲解http方式,更多请移步底部github。

client.php 源码:
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "log"
  6. "net/rpc"
  7. "os"
  8. )
  9.  
  10. type Args struct {
  11. A, B int
  12. }
  13.  
  14. type Quotient struct {
  15. Quo, Rem int
  16. }
  17.  
  18. func main() {
  19. if len(os.Args) != 2 {
  20. fmt.Println("Usage: ", os.Args[0], "server")
  21. os.Exit(1)
  22. }
  23. serverAddress := os.Args[1]
  24.  
  25. client, err := rpc.DialHTTP("tcp", serverAddress+":1234")
  26. if err != nil {
  27. log.Fatal("dialing:", err)
  28. }
  29. // Synchronous call
  30. args := Args{17, 8}
  31. var reply int
  32. err = client.Call("Math.Multiply", args, &reply)
  33. if err != nil {
  34. log.Fatal("Math error:", err)
  35. }
  36. fmt.Printf("Math: %d*%d=%d\n", args.A, args.B, reply)
  37.  
  38. var quot Quotient
  39. err = client.Call("Math.Divide", args, &quot)
  40. if err != nil {
  41. log.Fatal("Math error:", err)
  42. }
  43. fmt.Printf("Math: %d/%d=%d remainder %d\n", args.A, args.B, quot.Quo, quot.Rem)
  44.  
  45. }
server.go 源码:
  1. package main
  2.  
  3. import (
  4. "errors"
  5. "fmt"
  6. "net/http"
  7. "net/rpc"
  8. )
  9.  
  10. type Args struct {
  11. A, B int
  12. }
  13.  
  14. type Quotient struct {
  15. Quo, Rem int
  16. }
  17.  
  18. type Math int
  19.  
  20. func (t *Math) Multiply(args *Args, reply *int) error {
  21. *reply = args.A * args.B
  22. return nil
  23. }
  24.  
  25. func (t *Math) Divide(args *Args, quo *Quotient) error {
  26. if args.B == 0 {
  27. return errors.New("divide by zero")
  28. }
  29. quo.Quo = args.A / args.B
  30. quo.Rem = args.A % args.B
  31. return nil
  32. }
  33.  
  34. func main() {
  35.  
  36. math := new(Math)
  37. rpc.Register(math)
  38. rpc.HandleHTTP()
  39.  
  40. err := http.ListenAndServe(":1234", nil)
  41. if err != nil {
  42. fmt.Println(err.Error())
  43. }
  44. }

github:https://github.com/yangsir/beego_study

本文为AndyYang原创,转载请注明出处!
如果您觉得好,可以打赏作者:
如果您觉得累了,是否想看点美女养养眼:猛戳>>朋友帮
如果您觉得皮了,是否想来点神吐槽:猛戳>>iPhone查询中

已有0条评论

昵称:
邮箱:
iPhone查询中 - bbs.ipcxz.com 朋友帮 - www.pengyb.cn iPhone查询中 - bbs.ipcxz.com
反馈
微信订阅号