Go macaron (馬卡龍) 庫 (二)
前言
上個文章是講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 結果如下。
相關文章
- Go 小白貓學習 macaron (馬卡龍) 庫GoMac
- 龍芯go之路(二)-安裝opencv-goGoOpenCV
- HMM隱馬爾可夫模型來龍去脈(二)HMM隱馬爾可夫模型
- 巨集光MINIEV馬卡龍配置資訊曝光 並正式開啟預定
- 新金龍房卡
- 龍芯的go之路(一)-在龍芯中安裝goGo
- GO web 開發 實戰二,資料庫相關GoWeb資料庫
- go 代理穩定不卡頓Go
- go技巧分享(二)Go
- 從龍套到龍頭!超級馬里奧,人生開掛“三級跳”
- Go 每日一庫之 go-flagsGo
- Go快速入門(二)Go
- Go標準庫:Go template用法詳解Go
- go開源庫之jwt-go使用GoJWT
- oracle資料庫卡頓Oracle資料庫
- 浦發銀行首推AR版信用卡,集齊龍珠可召喚神龍!
- 《卡牌之聲:龍之島》Fami 通評測:橫尾太郎版《勇者鬥惡龍》
- Go標準庫ContextGoContext
- 二.Go微服務--令牌桶Go微服務
- 35歲馬龍有什麼好出路!!!wx交流下
- go的令牌桶實現庫 go-rateGo
- 小馬智行則在 2019 年通過佈局小馬智慧重卡進入自動駕駛卡車領域自動駕駛
- 馴龍卡牌對戰《遇見龍》手遊 安卓限時返利測試今日開啟安卓
- 墨天輪沙龍 | 亞馬遜雲科技李君:見微知著 - Serverless雲原生資料庫概覽亞馬遜Server資料庫
- go搞笑http請求庫GoHTTP
- go測試庫之apitestGoAPI
- Go 每日一庫之 godotenvGo
- Go 每日一庫之 cobraGo
- Go 每日一庫之 jjGo
- Go 每日一庫之 gopsutilGo
- Go 每日一庫之 validatorGo
- Go日誌管理庫zapGo
- Go 每日一庫之 bitsetGo
- Go三方庫——structsGoStruct
- Go之資料庫操作Go資料庫
- 【GO】27. zookeeper golang庫go-zookeeper例項Golang
- go每日一庫 [go-rate] 速率限制器Go
- 龍蜥理事長馬濤榮獲 “2022 年度開源人物”