使用反射获取指针接收器的 go-gin 的 handlerFunc

Getting go-gin's handlerFunc of a pointer receiver using reflect

我在使用反射获取 HandlerFunc 时遇到问题。

下面是我的代码:

type ServiceHandler struct {
    Name string
}

var handler *ServiceHandler

func init() {
   handler = ServiceHandler{Name: "test"}
}

func (handler *ServiceHandler) Handler1(c *gin.Context) {
   ...
}

func (handler *ServiceHandler) Handler2(c *gin.Context) {
   ...
}

到目前为止一切顺利。现在,我正在使用反射来列出我所有的方法并将它们传递给 gin 路由器。

func listHanlderMethods() {
    handlerType := reflect.TypeOf(handler)
    for i := 0; i < handlerType.NumMethod(); i++ {
        method := handlerType.Method(i)
        fmt.Println(method.Name)
    }
}

给出 Handler1Handler2.

我的问题在这里:

How can I get HandlerFunc s via reflect?

使用值查找方法。使用类型断言查找与 gin 处理程序签名匹配的方法。

v := reflect.ValueOf(handler)
for i := 0; i < v.NumMethod(); i++ {
    if h, ok := v.Method(i).Interface().(func(*gin.Context)); ok {
        // Do something with h
    }
}

Run it on the playground