亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1959 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號