一下午对Golang与Web框架的实现又有了进一步认识,学习新语言,痛并快乐着,走上正题:
main函数:
http.Handle("/", routers.Register(&g))
http.ListenAndServe(":2018", nil)
路由函数 即Register实现:
r.HandleFunc("/", g.Go(&controllers.IndexHandler{}))
Go函数实现:
type G struct {
//一些变量,好处是可以存储全局变量,与全局运行方法,比如用户认证
}
func (self *G) Go(handler interface{}) http.HandlerFunc {
**//关键时刻**
return func(w http.ResponseWriter, r *http.Request){
//如果在方法字典存在 则获取value,此处是{"GET":"Get"}
params := []reflect.Value{reflect.ValueOf(w), reflect.ValueOf(r), reflect.ValueOf(*self)}
fn, ok := self.Ml[r.Method]
if ok {
f := reflect.ValueOf(handler).MethodByName(fn)
if f.IsValid() {
f.Call(params)
}
}
}
}
控制函数实现
func (self *IndexHandler) Get(w http.ResponseWriter, r *http.Request, g kernel.G) {
//此处太墨迹了,就不写了
}