请教一个反射用法的问题(MethodByName函数)

通过method = vc.MethodByName("Get")获得了一个Func类型的Value

不知道这个Func类型的Value是个什么东西,要怎么使用它呢?

共 5 个回复


jimmykuu

你看的应该是beego框架的代码,他这个Get方法的定义是约定好的,一般框架都会定义一套规则。

type MainController struct {
    beego.Controller
}

func (this *MainController) Get() {
    this.Ctx.WriteString("hello world")
}
# 0

bianweiall

reflect包我现在还是一知半解的搞不清,只知道路由里有controllerType reflect.Type ,通过reflect.New()返回个Value,再通过MethodByName("Get")又返回个Value,想知道MethodByName("Get")这个函数到底是在干什么事情,还有返回的两个Value有什么不同?为什么后面的Value不能用Interface()函数?

# 1

bianweiall

是不是通过MethodByName("Get")得到MainController的Get()方法,那这个方法这个时候执行了吗?

# 2

jimmykuu

method.Call(in)这时候才执行。

就像你前面问题http://www.golang.tc/t/51384515320b522742000009中polaris回复你的,先把反射搞清楚了才能很好的理解。

通俗点讲,通过MethodByName("Get")你可以获得一个Value,它里面存有Get信息,再通过Call(in)来调用这个方法。

# 3

bianweiall

多谢你!还是跟中国足球样的基础没打好!

# 4