Go:从http.Request获取路径参数

Héc*_*tor 13 go

我正在使用Go开发REST API,但我不知道如何进行路径映射并从中检索路径参数.

我想要这样的东西:

func main() {
    http.HandleFunc("/provisions/:id", Provisions) //<-- How can I map "id" parameter in the path?
    http.ListenAndServe(":8080", nil)
}

func Provisions(w http.ResponseWriter, r *http.Request) {
    //I want to retrieve here "id" parameter from request
}
Run Code Online (Sandbox Code Playgroud)

http如果有可能的话,我想只使用包而不是web框架.

谢谢.

Jim*_*imB 23

如果您不想使用众多可用路由包中的任何一个,那么您需要自己解析路径:

将/ provision路径路由到您的处理程序

http.HandleFunc("/provisions/", Provisions)
Run Code Online (Sandbox Code Playgroud)

然后根据需要在处理程序中拆分路径

id := strings.TrimPrefix(req.URL.Path, "/provisions/")
// or use strings.Split, or use regexp, etc.
Run Code Online (Sandbox Code Playgroud)

  • 确保不要忘记在“/provisions”后面添加尾随“/” (2认同)

nip*_*una 21

您可以使用 golang gorilla/mux包的路由器来进行路径映射并从中检索路径参数。

import (
    "fmt"
    "github.com/gorilla/mux"
    "net/http"
)

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/provisions/{id}", Provisions)
    http.ListenAndServe(":8080", r)
}

func Provisions(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    id, ok := vars["id"]
    if !ok {
        fmt.Println("id is missing in parameters")
    }
    fmt.Println(`id := `, id)
    //call http://localhost:8080/provisions/someId in your browser
    //Output : id := someId
}
Run Code Online (Sandbox Code Playgroud)