Gorilla Mux处理卷曲请求

时间:2015-02-07 19:28:02

标签: go gorilla servemux

我想使用Gorilla mux来处理api请求。

命令将类似于:

curl http://0.0.0.0:8000/api/myapiname/v1?number=10&target=google.com&message=hello

我正在使用以下处理程序:

router.Methods("GET").Path("/api/myapiname/{version}").HandlerFunc(apihandler)

func apihandler(rw http.ResponseWriter, q *http.Request) {
    vars := mux.Vars(q)
    log.Println(vars["version"])
    log.Println(q.FormValue("number"))
    log.Println(q.FormValue("target"))
    log.Println(q.FormValue("message"))
}

但对于curl次请求,我只能获得number而不是targetmessage

的表单价值

使用Gorilla mux处理api请求的正确方法是什么?我需要子路由吗?

我只想接收http://0.0.0.0:8000/api/myapiname/v1?number=10&target=google.com&message=hello格式的任何http请求,并能够将其键映射到值

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试将查询添加到路由器,在这种情况下,您将在一个地图中包含所有变量。

router.Methods("GET").Path("/api/myapiname/{version}").Queries("number", "{number:[0-9]+}", "target", "{target:[^&]+}", "message", "{message:[^&]+}").HandlerFunc(apihandler)

func apihandler(rw http.ResponseWriter, q *http.Request) {
    vars := mux.Vars(q)
    log.Println(vars["version"])
    log.Println(vars("number"))
    log.Println(vars("target"))
    log.Println(vars("message"))
}