从函数类型获取struct

时间:2016-07-26 19:47:46

标签: go reflection struct

我目前有以下代码

func (r *Router) Get(path string, controller interface{}) {
    ...
    t := reflect.TypeOf(controller)
    ...
}

这称为执行以下操作

Route.Get("/", controllers.Test.IsWorking)

第二个论点基本上就是这个

type Test struct {
    *Controller
    Name string
}

func (t Test) IsWorking() {

}

type Controller struct {
    Method   string
    Request  *http.Request
    Response http.ResponseWriter
    Data     map[interface{}]interface{}
}

我想获得函数引用的结构。创建该类型的新结构并调用该函数,例如

controllers.Test.IsWorking

创建一个Test结构并调用IsWorking()

1 个答案:

答案 0 :(得分:0)

要在接口中创建一个新分配的类型结构的新指针,您只需要

newController := reflect.New(reflect.TypeOf(controller)).Interface()

或者首先在新实例上设置一个值:

newController := reflect.New(reflect.TypeOf(controller))
newController.Elem().FieldbyName("Method").Set(reflect.ValueOf("GET"))

如果要创建指向结构的指针并调用IsWorking方法,它看起来像

t := reflect.New(reflect.TypeOf(Test{}))
t.MethodByName("IsWorking").Call(nil)