大灰狼灰大 2015-01-26 09:46 采纳率: 50%
浏览 3017
已采纳

为什么用反射得不到子类的方法?

我想用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)
}
  • 写回答

2条回答 默认 最新

  • YXY_1989 2015-01-26 10:14
    关注

    反射的实质是调用类的编译文件,你父类的编译文件里是不可能存在子类的方法的。

    你的代码我不太明白,但另一种方案是,可以用多态性,转型一下,用子类对象实例化父类,然后再调子类方法。

    不一定是你想要的意思,也不一定能帮到你,但是以上两个解释是没有问题的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决