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?
时间: 2024-07-28 22:54:14