2 回答

TA貢獻1797條經驗 獲得超6個贊
Go 中沒有像 eval 這樣的東西,這是一件好事,因為這樣的事情非常危險。
您可以做的是將配置文件中的處理程序字符串映射到代碼中的處理程序函數的映射:
var handlers = map[string]func(http.ResponseWriter, *http.Request) (int, error){
"Apple": AppleHandler,
"Banana": BananaHandler,
}
然后,您只需執行以下操作即可注冊這些處理程序:
handler, ok := handlers[config.Handler]
if !ok {
log.Fatal(fmt.Errorf("Handler not found"))
}
r.HandleFunc(config.URL, handler).Methods(config.Method)

TA貢獻1817條經驗 獲得超14個贊
reflect
在運行時使用包訪問事物有一些有限的方法。但是,它不允許您搜索包中所有合適的獨立功能。如果它們都是已知結構類型/值的方法,那將是可能的。
作為您給定示例的替代方案,您可以簡單地使用 amap[string]func(...)
來存儲所有處理程序,在啟動時(在 期間init()
)初始化它并從那里獲取處理程序。但這或多或少也是現有的 http 多路復用器正在做的事情。
- 2 回答
- 0 關注
- 146 瀏覽
添加回答
舉報