我目前有以下代码
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()
答案 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)