人生若只如初见 何事秋风悲画扇 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
|
请发表评论