使用反射获取指针接收器的 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)
}
}
给出 Handler1 和 Handler2.
我的问题在这里:
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
}
}
我在使用反射获取 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)
}
}
给出 Handler1 和 Handler2.
我的问题在这里:
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
}
}