golang http:如何将请求路由到处理程序

Yve*_*ves 4 http go

我是 Golang 新手,有一个关于构建 Web 服务器的简单问题。

说我的网络服务器有用户,因此用户可以更改他们的名称和密码。以下是我设计 URL 的方法:

/users/Test         GET
/users/Test/rename       POST   newname=Test2
/users/Test/newpassword  POST   newpassword=PWD
Run Code Online (Sandbox Code Playgroud)

第一行显示名为 的用户的信息Test。第二个和第三个是重命名和重置密码。

所以我想我需要使用一些正则表达式来匹配HTTP请求,比如http.HandleFunc("/users/{\w}+", controller.UsersHandler).

然而Golang似乎并不支持这样的事情。那么这是否意味着我必须改变我的设计?例如,要显示用户的信息Test,我必须做什么/users GET name=Test

Rav*_*i R 6

您可能想使用 regex 包在 r.URL.Path 上运行模式匹配(在您的情况下,您可能需要在 POST 上使用它)这篇文章显示了一些模式匹配示例。正如 @Eugene 所建议的,还有 routers/http 实用程序包也可以提供帮助。

如果您不想使用其他软件包,这里可以给您一些想法:

主要内容:

http.HandleFunc("/", multiplexer)
...
func multiplexer(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case "GET":
        getHandler(w, r)
    case "POST":
        postHandler(w, r)
    }
}

func getHandler(w http.ResponseWriter, r *http.Request) {

    //Match r.URL.path here as required using switch/use regex on it
}

func postHandler(w http.ResponseWriter, r *http.Request) {

    //Regex as needed on r.URL.Path 
    //and then get the values POSTed
    name := r.FormValue("newname")
}
Run Code Online (Sandbox Code Playgroud)