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 关注
- 147 浏览
添加回答
举报