package main
import (
"errors"
"fmt"
"net"
"net/rpc"
)// rpc服務端
// 實現兩個rpc介面
// 1. 計算除數和被除數兩個數的乘積,返回乘積結果
// 2. 計算除數和被除數兩個數的除法結果,返回商和餘數
// 請求引數結構體
type requestparam struct
// 乘積計算結果直接返回int型別
// 返回兩個數的商和餘數響應結構體
type divisionresponse struct
// 定義空結構體,用於繫結方法
type calc struct
// rpc通訊中結構體結構`(request,*response) error`
// 計算乘法
func (c *calc) multi(req requestparam, rsp *int) error
// 計算除法
func (c *calc) sub(req requestparam, rsp *divisionresponse) error
rsp.quotient = req.dividend / req.divisor
rsp.remainder = req.dividend % req.divisor
return nil
}func main()
/* 通過http方式監聽rpc */
// 設定http handle
// 啟動http服務監聽
/* 直接通過socket方式監聽rpc服務 */
listener, err := net.listen("tcp", ":8080")
if err != nil
rpc.accept(listener)
}
package main
import (
"fmt"
"net/rpc"
)// rpc客戶端
// 請求引數結構體
type requestparam struct
// 乘積計算結果直接返回int型別
// 返回兩個數的商和餘數響應結構體
type divisionresponse struct
func main()
defer rpcclient.close()
// 計算乘法
var multiresult int
err = rpcclient.call("calc.multi", requestparam, &multiresult)
if err != nil
fmt.printf("乘積: %d\n", multiresult)
var subresult divisionresponse
err = rpcclient.call("calc.sub", requestparam, &subresult)
if err != nil
fmt.printf("商: %d, 餘數: %d\n", subresult.quotient, subresult.remainder)
}
golang官方rpc包的使用
rpc remote rrocedure call,遠端過程呼叫 是乙個計算機通訊協議。rpc協議假定某些傳輸協議的存在,如tcp和udp,為通訊程式之間攜帶資訊資料。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc採用c s模式,請求程式就是乙個客戶機,而服務提供程式就是乙個伺服器。首先...
GO標準包之fmt log
在fmt包中,主要是輸入和輸出 對於輸出 print 有三大類 pringf fprintf sprintf print fprint sprint println fprintln sprintln 通過書寫可以看出 第一行的按照格式化文字輸出內容 第二行輸出時不會換行 第三行的會換行 而第一列的...
go語言標準包之TCP
1.tcpconn 在tcp連線中,服務端是乙個標準的listen和accept結構 在net包中有乙個tcpconn類,用它來作為客戶端和伺服器互動的通道 func c tcpconn write b byte n int,err os.error func c tcpconn read b by...