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

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

mux 在 url 中有空參數

mux 在 url 中有空參數

Go
HUH函數 2022-07-18 16:19:13
我有這個主要的:func main() {    r := _routerprovider.GetRouter()    srv := &http.Server{        Handler:      r,        Addr:         "127.0.0.1:8000",        WriteTimeout: 60 * time.Second,        ReadTimeout:  15 * time.Second,    }    fmt.Println("Running in port 8000!")    err := srv.ListenAndServe()    if err != nil {        log.Fatalln(err.Error())    }}這是路由器:func (h HandlerProvider) GetRouter() *mux.Router {    r := mux.NewRouter()    r.HandleFunc("/health", Health).Methods("GET")    r.HandleFunc("/users", GetUsers).Methods("GET")    r.HandleFunc("/users", CreateUser).Methods("POST")    r.HandleFunc("/people", GetPeople).Methods("GET")    r.HandleFunc("/peoplebyid", GetPeopleByID).Methods("GET")    return r}無論我做什么,mux.Vars 總是返回一個空地圖。我究竟做錯了什么?這是一個示例處理程序:func GetPeopleByID(w http.ResponseWriter, r *http.Request) {    params := mux.Vars(r)    id, ok := params["id"]    if !ok {        ErrorHandler(w, r, fmt.Errorf("Error!"), 400)        return    }    idasnumber, err := strconv.Atoi(id)    if err != nil {        ErrorHandler(w, r, fmt.Errorf("Error!"), 400)        return    }    value, ok := services.PeopleDict[idasnumber]    bs, _ := json.MarshalIndent(value, "", "  ")    w.Write(bs)}
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

mux.Vars()僅在路由匹配時才會填充(因此 Gorilla mux 知道在哪里尋找它們)。路由中的匹配是通過在路由中預期變量值的地方使用或者{name}或占位符來完成的。{name:pattern}


所以對于以下路線:


r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)

您將擁有 vars 鍵category并id使用它們各自的值進行設置:


vars := mux.Vars(r)

fmt.Fprintf(w, "Category: %v\n", vars["category"])

fmt.Fprintf(w, "Id: %v\n", vars["id"])

在您的代碼中,您可以修復/peoplebyid這種方式(取決于 id 是什么)以使您的GetPeopleById()處理程序工作:


func (h HandlerProvider) GetRouter() *mux.Router {

// ...

r.HandleFunc("/people/{id:[0-9]+}", GetPeopleByID).Methods("GET")

// ...

}

有關如何在此處使用 vars 的信息,請參閱 Gorilla Mux 文檔:https ://github.com/gorilla/mux#examples ,特別是以以下開頭的部分:


路徑可以有變量。它們使用 {name} 或 {name:pattern} 格式定義。如果未定義正則表達式模式,則匹配的變量將是任何東西,直到下一個斜杠。


查看完整回答
反對 回復 2022-07-18
  • 1 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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