码迷,mamicode.com
首页 > 其他好文 > 详细

martini

时间:2015-09-21 17:22:04      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

package main

import "github.com/go-martini/martini"

func main() {
  m := martini.Classic()
  m.Get("/", func() string {
    return "Hello world!"
  })
  m.Run()
}


type ClassicMartini struct { *Martini Router }

func Classic() *ClassicMartini {
    r := NewRouter()
    m := New()
    m.Use(Logger())
    m.Use(Recovery())
    m.Use(Static("public"))
    m.MapTo(r, (*Routes)(nil))
    m.Action(r.Handle)
    return &ClassicMartini{m, r}
}
ClassicMartini 实现了Martini和Router接口, Martini对象通过ServerHttp每次请求来了,createContext,运行context.run(),这个方法里遍历运行各个martini 的handlers,最后运行 martini的action 函数,而这个action 被设置成Router的Handle函数,因此Router的Handle函数会成为每个请求的路由路口,同时router也有个相应的routecontext。
Recover handler就是运行了一个defer函数。 里面还有defaultReturnHandler,这个在routecontext.run()函数里被调用,每次调用一个route handler,如果有返回,就会通过它写入responsewriter。一旦检测到有写出status就终止后面的routehandler?


martini

标签:

原文地址:http://www.cnblogs.com/kuipertan/p/4826396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!