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