通用技术 Go macaron (马卡龙) 库 (二)

陈子昂 · 2020年08月13日 · 最后由 陈子昂 回复于 2020年08月13日 · 2272 次阅读

前言

上个文章是讲 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 结果如下。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

后面讲如何获取 cookie 和安全加盐等啊。

macaron 并不是一个小众的 web 服务,所以也是有学习意义的。
比如 ctx macaron.Context , ctx.Req.Request 等同 http.Request,ctx.Req 下面包装了不少服务方法来方便开发。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册