前言

上个文章是讲 macron 使用基础库的基本内容,文章地址如下:
Go macaron (马卡龙) 库 (一):(https://testerhome.com/topics/25088
下面来讲下 ctx 多个处理器之间传递对象和结构体使用,返回 JSON 和介绍下 Go 的一些语法。

传递对象

import (
    "encoding/json"
    "gopkg.in/macaron.v1"
    "log"
    "net/http"
)
//回包结构体
type JsonResult  struct{
    Code int `json:"code"`
    Data interface{} `json:"data"`
    Msg  string `json:"msg"`
}

func main() {
        var result JsonResult   
    mr.Get("/echo", func(ctx *macaron.Context) {
        ctx.Data["id"] = 1
    }, func(ctx *macaron.Context) {
        ctx.Data["id"] = ctx.Data["id"].(int) + 1
    }, func(ctx *macaron.Context) {
        ctx.Data["id"] = ctx.Data["id"].(int) + 1
    }, func(ctx *macaron.Context) ([]byte, error) { //返回Json类型   
        result.Code =200
        result.Data = ctx.Data["id"]
        result.Msg = "获取上下文结果成功"
                        //Json序列化数据result
            msg, err := json.Marshal(result)
            return msg,err
        }, )
        log.Println("Server is running")
    log.Println(http.ListenAndServe("127.0.0.1:4000", mr)) //go语言标准库基础来启动实例

这里写一个简单的 get 请求,path 段为/echo。
func 区域使用匿名函数,处理器第一层给上下文对象里面赋予一个 id,值=1,源码可见 Context 这个上下文对象的 Data 对象是一个 Map,key 需要是一个字符串,Value 可以是任何类型,这里用 int 1.

type Context struct {
     Data map[string]interface{}
}

处理器是线性往下执行的,处理器第二层和第一层之间需要是,说明这里面后面还有代码。ctx.Data["id"] 对象等于右边执行赋予左边,原来数上面 +1.

func(ctx *macaron.Context) {
       ctx.Data["id"] = ctx.Data["id"].(int) + 1
   }

第三层里面和第二层一样的,是为了验证处理器一样的还是会执行依次,原来数上面 +1 ,1+1+1 =3
第四层会返回一个 JSON 类型

//返回2个数据,字符数组和error
func(ctx *macaron.Context) ([]byte, error) {   
        result.Code =200
        result.Data = ctx.Data["id"]   //这个Data需要是interface{}类型 和ctx.Data对象,类似Java泛型和Object。
        result.Msg = "获取上下文结果成功"
                //序列化数据
        msg, err := json.Marshal(result)
        return msg,err
    }, )

其中 var result JsonResult 的 JsonResult 是这样的。Data 和 ctx.Data 对象一致。

type JsonResult  struct{
    Code int `json:"code"`
    Data interface{} `json:"data"`
    Msg  string `json:"msg"`
}
最终输出

在浏览器上输入http://127.0.0.1:4000/echo 结果如下。


↙↙↙阅读原文可查看相关链接,并与作者交流