我想用golang實現一個基本的mvc, IndexController繼承了mvc包中的Controller,但是在mvc包中用反射獲取不到IndexController的GET()方法,搞了一天了不知道怎麼解決!求高人指點!!!
package mvc
import (
"log"
"net/http"
"reflect"
)
type App struct{}
type Controller struct {
}
func (c *Controller) ServeHTTP(w http.ResponseWriter, r *http.Request) {
uc := reflect.ValueOf(c)
method := uc.MethodByName("GET")
methodValid := method.IsValid()
if methodValid == true {
log.Println("方法存在")
//method.Call([]reflect.Value{})
} else {
log.Println("方法不存在")
}
}
package main
import (
"log"
"net/http"
"test/mvc"
)
type IndexController struct {
mvc.Controller
}
func (c *IndexController) GET() {
log.Println("GET")
}
func main() {
http.Handle("/", &IndexController{})
http.ListenAndServe(":8100", nil)
}
反射的實質是調用類的編譯文件,你父類的編譯文件裡是不可能存在子類的方法的。
你的代碼我不太明白,但另一種方案是,可以用多態性,轉型一下,用子類對象實例化父類,然後再調子類方法。
不一定是你想要的意思,也不一定能幫到你,但是以上兩個解釋是沒有問題的。