程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> golang-為什麼用反射得不到子類的方法?

golang-為什麼用反射得不到子類的方法?

編輯:編程綜合問答
為什麼用反射得不到子類的方法?

我想用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)
}

最佳回答:


反射的實質是調用類的編譯文件,你父類的編譯文件裡是不可能存在子類的方法的。

你的代碼我不太明白,但另一種方案是,可以用多態性,轉型一下,用子類對象實例化父類,然後再調子類方法。

不一定是你想要的意思,也不一定能幫到你,但是以上兩個解釋是沒有問題的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved