2016-01-28 22 views
-1

例如如何Golang

router.Get(path, handler) // works fine 

methodStr = "Get"  
router.methodStr(path, handler) // error 

funcs := map[string]func(){"methodStr": "Get"} 
router.funcs["methodStr"](path, handler) // error 

reflect.ValueOf(router).MethodByName("Get").Call([]reflect.Value{}) // error 

我正在方法名稱爲字符串反映對象的動態方法名。如何使用字符串名稱調用路由器對象方法

+2

這其中大部分是無效的圍棋,和你沒有提供任何參數的反映例子。 – JimB

+0

@JimB我有兩個參數1.string值2.處理函數。我堅持在Call方法中傳遞兩個不同的參數 – Chandu

+1

您應該首先問自己爲什麼要這麼做,因爲自從我開始以後,我從未以這種方式使用過反射。在大多數情況下,你甚至不需要反思... – Elwinar

回答

2

您遇到的前兩個錯誤是無效的,所以我不確定您期望從它們中得到什麼。帶反射的最後一個示例沒有任何需要2的函數的參數,這會導致恐慌。加入2個參數正常工作:

http://play.golang.org/p/mSziWdW0hn

args := []reflect.Value{ 
    reflect.ValueOf("path"), 
    reflect.ValueOf("handler"), 
} 
reflect.ValueOf(router).MethodByName("Get").Call(args) 
+0

謝謝@JimB – Chandu