小弟阅读studygolang关于路由的流程遇到的问题

xuzhiping7 · · 4514 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

下面是我对studygolang路由部分的理解,不知道是否有错误,请大伙指正。这部分在我脑海里还是一堆散沙,无法结合起来。 main函数中initRouter()配置了router和subRouter两个路由。每个路由都有好几个filter,分别实现PreFilter、PreErrorHandle、PostFilter的接口。 在chain.go中的Run()。先执行PreFilter()若返回错误,将执行PreErrorHandle(),否则继续执行PostFilter()输出页面。 (输入页面方式如:view.go的PostFilter()函数中tpl.Execute(rw, data)将填充好的模版返回给用户。) 路由通过string路径注册,每个路由配置一个函数。router.HandleFunc在mux.go里面声明,所有路由统一通过NewRoute用append加进Router的routes数组中。 **问题1**: 对于下面那个函数有个疑问,注释中写的复制一份filterChan,貌似也是引用了之前的配置的filterChain,没有复制出来? func (r *Router) NewRoute() *Route { route := &Route{parent: r, strictSlash: r.strictSlash} // 复制一份filterChain,否则所有的route的FilterChain会一样 if r.filterChain != nil { var tmpChain FilterChain = *r.filterChain route.FilterChain = &tmpChain } r.routes = append(r.routes, route) return route } **问题2**: 我搜了下三方库和本地的代码,发现mux/filter.go中的ServeHTTP()调用了Run。然后找了下ServeHTTP(),发现mux/mux.go里和gorilla/context/context.go都有,不知道是哪个执行的?官方包这个函数介绍很模糊不知道是否官方的。 **问题3**: router.HandleFunc注册的函数是在哪里被执行的?这个函数是应该是先于filerChain的流程的吧? 例如router.HandleFunc("/", IndexHandler)中的IndexHandler? **问题4**: 一个游客打开网站首页,那么在程序代码中,他的整个流程是如何的呢? 麻烦Polars大哥有空耐心回答下。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4514 次点击  
加入收藏 微博
2 回复  |  直到 2013-07-19 15:23:31
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传