• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go框架macaron的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言中定时器cron的基本使用发布时间:2022-07-10
下一篇:
Go语言通用重试函数封装发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap