Go macaron (馬卡龍) 庫 (二)

陳子昂發表於2020-08-13

前言

上個文章是講macron使用基礎庫的基本內容,文章地址如下:
Go macaron (馬卡龍) 庫 (一):(https://testerhome.com/topics/25088
下面來講下ctx多個處理器之間傳遞物件和結構體使用,返回JSON和介紹下Go的一些語法。

傳遞物件

import (
"encoding/json"
"
gopkg.in/macaron.v1"
"
log"
"
net/http"
)
//回包結構體
type JsonResult struct{
Code int `json:"
code"`
Data interface{} `json:"
data"`
Msg string `json:"
msg"`
}

func main() {
var result JsonResult
mr.Get("
/echo", func(ctx *macaron.Context) {
ctx.Data["
id"] = 1
}, func(ctx *macaron.Context) {
ctx.Data["
id"] = ctx.Data["id"].(int) + 1
}, func(ctx *macaron.Context) {
ctx.Data["
id"] = ctx.Data["id"].(int) + 1
}, func(ctx *macaron.Context) ([]byte, error) { //返回Json型別
result.Code =200
result.Data = ctx.Data["
id"]
result.Msg = "
獲取上下文結果成功"
//Json序列化資料result
msg, err := json.Marshal(result)
return msg,err
}, )
log.Println("
Server is running")
log.Println(http.ListenAndServe("
127.0.0.1:4000", mr)) //go語言標準庫基礎來啟動例項

這裡寫一個簡單的get請求,path段為/echo。
func區域使用匿名函式,處理器第一層給上下文物件裡面賦予一個id,值=1,原始碼可見Context這個上下文物件的Data物件是一個Map,key需要是一個字串,Value可以是任何型別,這裡用int 1.

type Context struct {
Data map[string]interface{}
}

處理器是線性往下執行的,處理器第二層和第一層之間需要是,說明這裡面後面還有程式碼。ctx.Data["id"]物件等於右邊執行賦予左邊,原來數上面+1.

func(ctx *macaron.Context) {
ctx.Data["id"] = ctx.Data["id"].(int) + 1
}

第三層裡面和第二層一樣的,是為了驗證處理器一樣的還是會執行依次,原來數上面+1 ,1+1+1 =3
第四層會返回一個JSON型別

//返回2個資料,字元陣列和error
func(ctx *macaron.Context) ([]byte, error) {
result.Code =200
result.Data = ctx.Data["id"] //這個Data需要是interface{}型別 和ctx.Data物件,類似Java泛型和Object。
result.Msg = "獲取上下文結果成功"
//序列化資料
msg, err := json.Marshal(result)
return msg,err
}, )

其中var result JsonResult 的JsonResult是這樣的。Data和ctx.Data物件一致。

type JsonResult  struct{
Code int `json:"code"`
Data interface{} `json:"data"`
Msg string `json:"msg"`
}
最終輸出

在瀏覽器上輸入http://127.0.0.1:4000/echo 結果如下。

相關文章