Golang 中国

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

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

5 回复
jimmykuu
#1 jimmykuu • 2013-03-09 21:18

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

type MainController struct {
    beego.Controller
}

func (this *MainController) Get() {
    this.Ctx.WriteString("hello world")
}
bianweiall
#2 bianweiall • 2013-03-09 21:47

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

bianweiall
#3 bianweiall • 2013-03-09 21:58

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

jimmykuu
#4 jimmykuu • 2013-03-09 22:11

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

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

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

bianweiall
#5 bianweiall • 2013-03-09 22:18

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

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。