我正在设计一个路由器API,我希望能够通过其功能查找路径。就像是:
createUser := func(w http.ResponseWriter, r *http.Request) {
// create a user
}
createPost := func(w http.ResponseWriter, r *http.Request) {
// create a post
}
router.Post("/users", createUser)
router.Post("/posts", createPost)
fmt.Println(router.Lookup(createPost))
这是一个游乐场链接:https://play.golang.org/p/ec6U0jJUbfx很难做到这一点,因为您无法测试函数是否相等或将其作为映射中的键。这有可能吗?
还有我没有想到的其他解决方法吗?
reflect
解决方案就可以了。
最佳答案
您可以使用处理所有请求的ServerHTTP方法创建服务器结构。有要求时,您可以通过路径和功能查找特定方法
这是一个例子:
type Server struct {
routes []route
}
func (s *Server) handlerServer(db mydb.IDB, ctx context.Context) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := ServerContext{w, r, db, ctx}
for i := 0; i < len(s.routes); i++ {
currentRoute := s.routes[i]
if isValidMethod(currentRoute, r) {
err := currentRoute.h(&ctx)
if err != nil {
log.Fatal(err)
}
}
}
}
}
我希望这是有帮助的
关于go - 用函数查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63438643/