请教reflect包MethodByName函数和Call函数怎么用

有一段代码如下:

        vc := reflect.New(runrouter.controllerType)
        init := vc.MethodByName("Init")
        in := make([]reflect.Value, 2)
        ct := &Context{ResponseWriter: w, Request: r, Params: params}
        in[0] = reflect.ValueOf(ct)
        in[1] = reflect.ValueOf(runrouter.controllerType.Name())
        init.Call(in)

        in = make([]reflect.Value, 0)
        method := vc.MethodByName("Prepare")
        method.Call(in)

就是在这里调用了Controller对象的Init(ctx *Context, cn string)方法 看不懂,求教! 另外请教reflect包下的

type Value struct {
     typ *commonType
     val unsafe.Pointer
     flag
}

到底是些什么东西?

共 1 个回复


polaris

首先,不知道你对反射概念了解不? 如果不了解反射是个啥东东,建议查查

reflect.Value代表一个值,比如;var a int = 2,reflect.Value就代表一个int类型的值,相应的reflect.Type代表一个类型

上面的代码,就是通过反射new一个实例,然后调用相应的方法。

注意:具体的方法是一个Value

总之,如果这段代码完全看不懂,说明对反射概念不理解,还是先理解一下反射吧

# 0