zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第二章 装配Bean
    JAVAScript中DOM与BOM的差异分析
    前端中的命名规则
    用产生随机数的方法加上鼠标事件实现点击生成彩色积木
    关于AngularJs中监听事件及脏循环的理解
    前端工程师面(笔)试题部分汇总
    Js中获取显示器、浏览器以及窗口等的宽度与高度的方法
    实现选项卡切换的三种方式
    对于前端浅显理解
    js程序开发-3
  • 原文地址:https://www.cnblogs.com/wl-blog/p/14971631.html
Copyright © 2011-2022 走看看