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 web 開發 實戰二,資料庫相關GoWeb資料庫
- go技巧分享(二)Go
- go習題二Go
- Go快速入門(二)Go
- Go 每日一庫之 go-flagsGo
- 龍芯go之路(二)-安裝opencv-goGoOpenCV
- 二.Go微服務--令牌桶Go微服務
- go開源庫之jwt-go使用GoJWT
- Go標準庫:Go template用法詳解Go
- go的markdown解析庫和session庫GoSession
- go的令牌桶實現庫 go-rateGo
- Go 語言介面詳解(二)Go
- GO語言學習——切片二Go
- Go語言字串高效拼接(二)Go字串
- 二、Go語言基礎:go install與go fmt命令使用示例詳解Go
- go每日一庫 [go-rate] 速率限制器Go
- 【GO】27. zookeeper golang庫go-zookeeper例項Golang
- Go 每日一庫之 jjGo
- Go 每日一庫之 godotenvGo
- Go 每日一庫之 cobraGo
- Go之資料庫操作Go資料庫
- Go 每日一庫之 bitsetGo
- Go三方庫——structsGoStruct
- Go標準庫ContextGoContext
- go搞笑http請求庫GoHTTP
- Go日誌管理庫zapGo
- Go學習【二】學習資料Go
- Go - 如何編寫 ProtoBuf 外掛(二)?Go
- Go的程式設計模式二——funOptionGo程式設計設計模式
- client-go實戰之二:RESTClientclientGoREST
- Go benchmark 一清二楚Go
- Go-Spring入門篇(二)GoSpring
- go-zero之支付服務二Go
- Go語言之併發示例-Pool(二)Go
- Go 互斥鎖 Mutex 原始碼分析(二)GoMutex原始碼
- go微服務框架go-micro深度學習(二) 入門例子Go微服務框架深度學習
- Go 每日一庫之 go-carbon,優雅的 golang 日期時間處理庫Golang