Golang 通过接口传递对象,并通过反射调用对象中方法

时间:2022-01-22 03:55:20

一下午对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) {
//此处太墨迹了,就不写了