我有這個應用程序,其中請求根據結構中的字符串進行過濾,並執行不同的功能。Golang靜態與對象的動態綁定
我的方法是有一個Map將字符串映射到函數指針並執行它們。然而,這種方法正在被想要通過反思進行過濾的隊友所主張。我們使用Go,它用於監控我們網站的活動。
隊友的方法:使用反射來切換基於字符串的對象,將字符串傳遞給函數並讓函數調用相關函數。 我的方法:從字符串到函數的簡單映射
任何幫助表示讚賞。
我有這個應用程序,其中請求根據結構中的字符串進行過濾,並執行不同的功能。Golang靜態與對象的動態綁定
我的方法是有一個Map將字符串映射到函數指針並執行它們。然而,這種方法正在被想要通過反思進行過濾的隊友所主張。我們使用Go,它用於監控我們網站的活動。
隊友的方法:使用反射來切換基於字符串的對象,將字符串傳遞給函數並讓函數調用相關函數。 我的方法:從字符串到函數的簡單映射
任何幫助表示讚賞。
基於反射的自動發現的不足之處在於,您永遠不得不小心添加到系統中的內容,因爲它可以自動提取。
vs map方法,你需要明確地公開每個函數。
反射更確切地說是更酷和自動的魔法。但是,自動魔法並不能很好地保證安全性或長期可維護性。
另外,如果您嘗試註冊一個不匹配的函數,map [string] func(帶特定簽名)將不會編譯。
在哪裏你會發現與反思的東西,然後思考爲什麼它是一個運行時失敗。
通過反射調用函數的速度比通過func指針慢100倍。 – OneOfOne 2015-04-03 06:11:31
簡單是最好的。但唯一確定的方法是基準。試試他們兩個並比較。 – jimt 2015-04-03 00:31:21
我敢打賭,解碼到預定義的結構比反射快(但當然在決定之前進行測量)。另外,不要忘記你的結構體定義不必覆蓋* everything *,你可以只包含你需要考慮的文檔部分,其餘部分將被解碼器忽略。 – maerics 2015-04-03 01:06:11
@maerics:很酷。我會考慮的! – premunk 2015-04-03 16:58:48