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