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.

Welcome - Macaron Documentation

基于实际生产实践所得,只有干货可以分享!

目录

基本使用

路由分组使用


基本使用

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语言实现一个简易的后台订单管理系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProblemTerminator

您的鼓励将是作者最大的动力哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值