簡體   English   中英

使用反射獲取指針接收器的 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

我的問題在這里:

如何通過反射獲得 HandlerFunc ?

使用該值查找方法。 使用類型斷言查找與 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
    }
}

在操場上運行它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM