登录
首页 >  Golang >  Go问答

使用函数查找字符串

来源:stackoverflow

时间:2024-02-27 19:30:26 234浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《使用函数查找字符串》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

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

希望这对您有帮助

到这里,我们也就讲完了《使用函数查找字符串》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>