go框架macaron的使用


人生若只如初見 何事秋風悲畫扇
macaron:Package macaron is a high productive and modular web framework in Go. It takes basic ideology of Martini and extends in advance.

https://go-macaron.com/

基本使用
package main

import (
"log"
"net/http"
"test/pkg/macaron.v1"
)

//特別注意:屬性的名稱首字母如果小寫,那么返回時值將為空
type Student struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}

type Result struct {
Data interface{}
Total int
}

//路由對應的處理器
func testRouter(ctx *macaron.Context) {
ctx.JSON(http.StatusOK, macaron.ReturnStruct{Code: http.StatusOK, Msg: "success", Data: Student{ID: 1416270244, Name: "wl", Age: 101}})
}

//路由對應的處理器(此處加了簡單的列表數據返回)
func testRouter2(ctx *macaron.Context) macaron.ReturnStruct {

stuList := []Student{
{ID: 1416270244, Name: "wl", Age: 101},
{ID: 1416270245, Name: "lw", Age: 99},
}
return macaron.ReturnStruct{Code: http.StatusOK, Msg: "success", Data: Result{Data:&stuList, Total:len(stuList)}}
}

func main() {
m := macaron.Classic()
m.Use(macaron.Renderer())
//設置兩個Get請求的路由,此處testRouter稱為處理器
m.Get("/test", testRouter)
m.Get("/test2", testRouter2)
log.Println("Server is running...")
//也可以m.run(9090)
err := http.ListenAndServe("0.0.0.0:9090", m)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
啟動該服務,瀏覽器訪問http://localhost:9090/test2,即可看到效果:

{"code":200,"message":"success","data":{"Data":[{"id":1416270244,"name":"wl","age":101},{"id":1416270245,"name":"lw","age":99}],"Total":2}}
需要特別說明的幾點:

1、結構體的屬性名稱首字母務必大寫

2、設置路由時,處理器完全可以有多個,當然也可以只寫一個

3、馬卡龍的上下文使用指針類型*macaron.Context,否則會報錯:Value not found for type macaron.Context

路由分組使用

import (
"log"
"net/http"
"test/pkg/go-macaron/toolbox"
"test/pkg/macaron.v1"
)

func CheckLogin(ctx *macaron.Context) {
/*此處為所有接口進入時都需要走的地方,可以寫類似統一登錄認證的東西*/
log.Fatal("驗證登錄通過...")
return
}

func CheckPermission(ctx *macaron.Context) {
log.Fatal("驗證權限...")
return
}

func CheckInvlidate(ctx *macaron.Context) {
log.Fatal("驗證token通過...")
return
}

func testRouter3(ctx *macaron.Context) {
/*接口邏輯*/
log.Fatal("testRouter3...")
return
}

func testRouter4(ctx *macaron.Context) macaron.ReturnStruct {
/*接口邏輯*/
return macaron.ReturnStruct{Code: http.StatusOK, Msg: "登錄成功,驗證token成功: api/v1/testRouter4"}
}

func testRouter5(ctx *macaron.Context) macaron.ReturnStruct {
/*接口邏輯*/
return macaron.ReturnStruct{Code: http.StatusOK, Msg: "登錄成功,驗證token、權限成功: api/v2/testRouter5"}
}

func testRouter6(ctx *macaron.Context) macaron.ReturnStruct {
/*接口邏輯*/
return macaron.ReturnStruct{Code: http.StatusOK, Msg: "登錄成功,驗證token、權限成功: api/v2/testRouter6"}
}

func RouteM(m *macaron.Macaron) {
// /api/testRouter3
m.Get("/testRouter3", testRouter3)
}

func RouteN(m *macaron.Macaron) {
//api/v1/testRouter4
m.Get("/testRouter4", testRouter4)
}

func RouteQ(m *macaron.Macaron) {
//api/v2/testRouter5
m.Get("/testRouter5", testRouter5)
}

func RouteK(m *macaron.Macaron) {
//api/v2/testRouter6
m.Get("/testRouter6", testRouter6)
}

func main() {

m := macaron.Classic()
m.Use(macaron.Renderer())
//m.Use(macaron.Recovery())
//m.Use(macaron.Logger())
//m.Use(session.Sessioner())
m.Use(toolbox.Toolboxer(m))
//m.Use(cors.AllowAll().HandlerFunc)
m.Group("/api", func() {
m.Get("/one", testRouter3)
//組內繼續嵌套路由,該組內的所有路由都需要先走CheckInvlidate
m.Group("/v1", func() {
RouteN(m)
}, CheckInvlidate)
//組內嵌套第二組,多個處理器:該組內的所有路由都需要先走CheckPermission和CheckInvlidate
m.Group("/v2", func() {
//分模塊組織該group下的路由
RouteK(m)
RouteQ(m)
}, CheckPermission, CheckInvlidate)
//more...
})

log.Println("Server is running...")
err := http.ListenAndServe("0.0.0.0:9090", m)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
//m.Run(9090)
}
如果對於其實戰還有興趣可以參考這篇:go語言實現一個簡易的后台訂單管理系統
————————————————
版權聲明:本文為CSDN博主「_雨落山嵐」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/HYZX_9987/article/details/100022849


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM