美文网首页
008--Go框架Macaron使用

008--Go框架Macaron使用

作者: 糖纸疯了 | 来源:发表于2018-08-09 08:00 被阅读467次

    1、为了使用Macaron,我只是用了一个网站的东西:https://github.com/Unknwon/macaron

    go get github.com/Unknwon/macaron
    

    2、Demo启动案例:

        import "github.com/Unknwon/macaron"
        func main() {
            m := macaron.Classic()
            m.Get("/", func() string {
                return "Hello world!"
            })
            m.Get("/hello", func()(int, string) {
                return 400, "Hello world!"
            })
            m.Run()
        }
    
    • 访问路径:http://localhost:4000/
      3、Macaron可以使用多个处理器(下面就是处理器,允许有多个)
        func() string {
            return "Hello world!"
        }
    

    4、扩展示例

        func main() {
            m := macaron.Classic()
            m.Get("/",myHandler)//这个地方不是函数调用,是将这个地址传递给m.get方法
            m.Get("/hello/*",myHandler)//这个地方不是函数调用,是将这个地址传递给m.get方法
            log.Print("Server is Running.....")
            // 通过标准接口库启实例
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
        // 依赖注入获取服务
        func myHandler(context *macaron.Context) string  {
            return  "this request path is: " + context.Req.RequestURI;
        }
    

    5、(请求上下文)同一个请求,多个处理器之间传递数据

        func main() {
            m := macaron.Classic()
            m.Get("/",handler1 , handler2, handler3)
            log.Print("Server is Running.....")
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
        // 依赖注入获取服务
        func handler1(ctx *macaron.Context) {
            ctx.Data["Num"] = 1
        }
        func handler2(ctx *macaron.Context) {
            ctx.Data["Num"] =  ctx.Data["Num"].(int) + 2
        }
        func handler3(ctx *macaron.Context) string{
            return fmt.Sprintf("Num: %d", ctx.Data["Num"])
        }
    

    6、(请求上下文)获取参数

        func main() {
            m := macaron.Classic()
            m.Get("/", func(ctx *macaron.Context) string{
                return ctx.Query("uid")
            })
            log.Print("Server is Running.....")
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
    
        func main() {
            m := macaron.Classic()
            m.Get("/", func(ctx *macaron.Context) string{
                return ctx.RemoteAddr()
            })
            log.Print("Server is Running.....")
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
    

    8、处理器让出处理权限,让之后的处理器先处理

        func main() {
            m := macaron.Classic()
            m.Get("/",next1,next2,next3 )
            log.Print("Server is Running.....")
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
        func next1(ctx *macaron.Context){
            fmt.Print("next1-start   ")
            ctx.Next();
            fmt.Print("next1-exit   ")
        }
        func next2(ctx *macaron.Context){
            fmt.Print("next2-start   ")
            ctx.Next();
            fmt.Print("next2-exit   ")
        }
        func next3(ctx *macaron.Context) string{
            fmt.Print("next3-start   ")
            ctx.Next();
            fmt.Print("next3-exit   ")
            return  "hello world"
        }
    

    9、设置cookie

        func main() {
            m := macaron.Classic()
            m.Get("/cookie/set", setCookie)
            m.Get("/cookie/get", getCookie)
            log.Print("Server is Running.....")
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
        func setCookie(ctx *macaron.Context) {
            ctx.SetCookie("user", "enzoism")
            ctx.SetSecureCookie("user2", "enzoism",1000)
            ctx.SetSuperSecureCookie("salt","user3", "enzoism")
        }
        func getCookie(ctx *macaron.Context) string {
            fmt.Println("-----cookie:"+ctx.GetCookie("user"))
            value2,_:=ctx.GetSecureCookie("user2")
            fmt.Println("-----cookie2:"+value2)
            value3,_:=ctx.GetSuperSecureCookie("salt","user3")
            fmt.Println("-----cookie3:"+value3)
            return "Hello World!"
        }
    

    10、响应流(一旦有任何一个处理器响应了,后面的处理器都不在执行了)

        ctx.Resp.Write([]byte("你好,世界!"))
        或者返回 return "Hello World!"
    

    11、请求对象(查看任何请求对象信息)

        return ctx.Req.Method
    

    12、服务静态资源(默认是public,在创建的时候不需要public路径)

        func main() {
            m := macaron.Classic()
            m.Use(macaron.Static("public"))
            log.Print("Server is Running.....")
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
    

    13、容错恢复(可以理解成一种调试手段)

        func main() {
            m := macaron.Classic()
            //macaron.Env =macaron.PROD//生产环境
            // 服务静态文件
            m.Use(macaron.Static("public"))
            m.Get("/panic", panicHandler)
            log.Print("Server is Running.....")
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
        func panicHandler() {
            panic("有钱,任性!")
        }
    

    14、全局日志

        func main() {
            m := macaron.Classic()
            m.Get("/log", logger)
            log.Print("Server is Running.....")
            log.Print(http.ListenAndServe("localhost:4000", m))
        }
        func logger(l *log.Logger) {
            l.Println("打印一行日志")
        }
    

    简化代码

    package main
    
    import (
        "github.com/Unknwon/macaron"
        "log"
        "fmt"
    )
    // 同一个请求,多个处理器之间传递数据
    func main() {
        m := macaron.Classic()
        // 服务静态文件
        m.Use(macaron.Static("public"))
        // 在同一个请求中,多个处理器之间可相互传递数据
        m.Get("/", handler1, handler2, handler3)
    
        // 获取请求参数
        m.Get("/q", queryHandler)
    
        // 获取远程 IP 地址
        m.Get("/ip", ipHandler)
    
        // 处理器可以让出处理权限,让之后的处理器先执行
        m.Get("/next", next1, next2, next3)
    
        // 设置和获取 Cookie
        m.Get("/cookie/set", setCookie)
        m.Get("/cookie/get", getCookie)
    
        // 响应流
        m.Get("/resp", respHandler)
    
        // 请求对象
        m.Get("/req", reqHandler)
    
        // 请求级别容错恢复
        m.Get("/panic", panicHandler)
    
        // 全局日志器
        m.Get("/log", logger)
    
        m.Run()
    }
    // 依赖注入获取服务
    func handler1(ctx *macaron.Context) {
        ctx.Data["Num"] = 1
    }
    func handler2(ctx *macaron.Context) {
        ctx.Data["Num"] =  ctx.Data["Num"].(int) + 2
    }
    func handler3(ctx *macaron.Context) string{
        return fmt.Sprintf("Num: %d", ctx.Data["Num"])
    }
    func queryHandler(ctx *macaron.Context) {
        fmt.Println(ctx.Query("uid"))
        fmt.Println(ctx.QueryInt("uid"))
        fmt.Println(ctx.QueryInt64("uid"))
    }
    
    func ipHandler(ctx *macaron.Context) string {
        return ctx.RemoteAddr()
    }
    
    func next1(ctx *macaron.Context) {
        fmt.Println("位于处理器 1 中")
    
        ctx.Next()
    
        fmt.Println("退出处理器 1")
    }
    
    func next2(ctx *macaron.Context) {
        fmt.Println("位于处理器 2 中")
    
        ctx.Next()
    
        fmt.Println("退出处理器 2")
    }
    
    func next3(ctx *macaron.Context) {
        fmt.Println("位于处理器 3 中")
    
        ctx.Next()
    
        fmt.Println("退出处理器 3")
    }
    
    func setCookie(ctx *macaron.Context) {
        ctx.SetCookie("user", "wuwen")
    }
    
    func getCookie(ctx *macaron.Context) string {
        return ctx.GetCookie("user")
    }
    
    func respHandler(ctx *macaron.Context) {
        ctx.Resp.Write([]byte("你好,世界!"))
    }
    
    func reqHandler(ctx *macaron.Context) string {
        return ctx.Req.Method
    }
    
    func panicHandler() {
        panic("有钱,任性!")
    }
    
    func logger(l *log.Logger) {
        l.Println("打印一行日志")
    }
    

    相关文章

      网友评论

          本文标题:008--Go框架Macaron使用

          本文链接:https://www.haomeiwen.com/subject/eswfbftx.html