Golang HTTP:如何将请求路由到处理程序

4
我是一个Golang的新手,关于构建Web服务器有一个简单问题需要问一下。
我的Web服务器有用户,所以用户可以更改他们的名称和密码。这里是我设计的URL:
/users/Test         GET
/users/Test/rename       POST   newname=Test2
/users/Test/newpassword  POST   newpassword=PWD

第一行显示了名为的用户信息。第二行和第三行是重命名和重置密码。因此,我认为需要使用一些正则表达式来匹配HTTP请求,例如http.HandleFunc("/users/{\w}+", controller.UsersHandler)。然而,似乎Golang并不支持这样的东西。那么这是否意味着我必须改变我的设计呢?例如,要显示用户的信息,我必须执行/users GET name=Test吗?
2个回答

6

您可能希望在r.URL.Path上运行模式匹配,使用regex包(在您的情况下,您可能需要在POST上使用它)。这篇文章展示了一些模式匹配的示例。正如@Eugene建议的那样,还有可以帮助的路由器/ 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")
}

0

很遗憾,标准的http路由器不太智能。有两种方法:

手动检查方法、URL并提取用户名。

使用其他包中的路由器,例如https://github.com/gorilla/mux gorilla mix, echo gin-gonic等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接