008-GoフレームMacaron使用

8062 ワード

  • 参照URL:https://github.com/Unknwon/go-rock-libraries-showcases/blob/master/lectures/04-macaron/class2/sample/context.go
  • 1、Macaronを使うために、ウェブサイトを使っただけです.https://github.com/Unknwon/macaron
    go get github.com/Unknwon/macaron
    
    2、デモ起動例:
        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))
        }
    
  • アクセス:http://localhost:4000/?uid=100 7、リモートIPアドレス
  • を取得する.
        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、クッキーの設定
        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))
        }
    
  • アクセスアドレス:http://localhost:4000/hello.cssまたはhttp://localhost:4000/dir/index.html
  • 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("  ,  !")
        }
    
  • アクセスディレクトリ:http://localhost:4000/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("      ")
    }