go - 用函数查找字符串

标签 go

我正在设计一个路由器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/

相关文章:

go - 如何使用go获取两位数的当前小时和分钟?

go - AWS API Gateway读取:连接因对等错误而重置

json - 将结构编码为 json Go

go - 在 go 中使用接口(interface)进行依赖注入(inject)

go - 是否可以为所有 goroutine 使用一个 RabbitMQ channel ?

unicode - 将 unicode 代码点转换为 Go 中的文字字符

go - 如何处理社交登录? - 示例流程

javascript - Golang vs JavaScript (v8/node.js) map 性能

go - 如何在 Go 中设置进程标题?

go - 如何在父方法中调用子方法?