为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
哈士奇WWW 2021-11-29 16:30:29
我正在使用 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}http如果可能的话,我只想使用包而不是 Web 框架。
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

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


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


http.HandleFunc("/provisions/", Provisions)

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


id := strings.TrimPrefix(req.URL.Path, "/provisions/")

// or use strings.Split, or use regexp, etc.


查看完整回答
反对 回复 2021-11-29
?
智慧大石

TA贡献1946条经验 获得超3个赞

您可以使用 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

}


查看完整回答
反对 回复 2021-11-29
?
忽然笑

TA贡献1806条经验 获得超5个赞

Golang 从 URL 查询“/template/get/123”中读取值。

我使用了标准的 gin 路由和处理来自上下文参数的请求参数。


在注册您的端点时使用它:


func main() {

    r := gin.Default()

    g := r.Group("/api")

    {

        g.GET("/template/get/:Id", templates.TemplateGetIdHandler)

    }

    r.Run()

}

并在处理程序中使用此函数


func TemplateGetIdHandler(c *gin.Context) {

    req := getParam(c, "Id")

    //your stuff

}


func getParam(c *gin.Context, paramName string) string {

    return c.Params.ByName(paramName)

}

Golang 从 URL 查询“/template/get?id=123”中读取值。

在注册您的端点时使用它:


func main() {

    r := gin.Default()

    g := r.Group("/api")

    {

        g.GET("/template/get", templates.TemplateGetIdHandler)

    }

    r.Run()

}

并在处理程序中使用此函数


type TemplateRequest struct {

    Id string `form:"id"`

}


func TemplateGetIdHandler(c *gin.Context) {

    var request TemplateRequest

    err := c.Bind(&request)

    if err != nil {

        log.Println(err.Error())

        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})

    }

    //your stuff

}


查看完整回答
反对 回复 2021-11-29
  • 3 回答
  • 0 关注
  • 1758 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信