專案做大了,免不了要用到微服務,並且是跨語言的。下面用go自帶的 jsonrpc 實現微服務供php呼叫。
服務端:jsonrpcservice.go
package main
import (
"fmt"
"log"
"net"
"net/rpc"
"net/rpc/jsonrpc"
"os"
)type rpcservice struct
//請求資料結構體
type requestdata struct
// 響應資料結構體
type responsedata struct //資料
msg string //說明
}// 方法(必須是公有方法,且必須是兩個引數)
func (this *rpcservice ) order(request requestdata , res *responsedata ) error
//mjson,_ :=json.marshal(m)
//mstring :=string(mjson)
res.status = req.type
res.data = m
res.msg = "success"
return nil
}func main()
_, _ = fmt.fprintf(os.stdout, "%s", "jsonrpc is started\n")
for
go func(conn net.conn) (conn)
}}
php客戶端呼叫
$host = '127.0.0.1';
$port = '5050';
$conn = fsockopen($host, $port, $errno, $errstr, 3);
if (!$conn)
$method = 'rpcservice .order';
$params = ['type'=>4,'data'=>'資料'];
$err = fwrite($conn, json_encode(array(
'method' => $method,
'params' => [$params],
'id' => 0,
))."\n");
if ($err === false)
stream_set_timeout($conn, 0, 30000);
$line = fgets($conn);
if ($line === false)
var_dump(json_decode($line,true));
exit;
啟動服務端後,執行php指令碼就可以與go的rpc通訊了。注意超時時間設定! golang 函式用例
golang函式是不支援巢狀 但是可以使用匿名函式實現巢狀 預設引數 過載,但支援 以下是一些基本用法示例 一般用法,無返回值 func funcname1 input1 type1 多引數,乙個返回值 func funcname2 input1 type1,input2 type2 output1...
Golang實現單鏈表
package main import fmt 定義結構體 注意點 go不支援型別別名,type與c語言中的typedef並不一樣 var a int a 3 type int int var b int b 3 fmt.println a b 報錯 invalid operation a b mi...
golang之路 bitmap 實現
介紹一下bitmap的思想 情景1 有些時候我們為了判斷乙個某個元素是否存在乙個集合中,普通的方式是map int x儲存。資料量小的時候還可以 待資料量龐大的時候,比如我們判斷某人的momoid是否在某個momoid切片中,儲存就悲劇了。算一下 乙個int 4byte 倘若儲存500w個資料 4 ...