Routing and Path Parameters
Yo'naltirish va yo'l parametrlari
Ko'p API'larda yo'lning bir qismi o'zgaruvchan bo'ladi — masalan /users/42 dagi 42. Zamonaviy Go'da http.ServeMux buni to'g'ridan-to'g'ri qo'llab-quvvatlaydi.
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("GET /users/{id}", func(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id")
fmt.Fprintf(w, "foydalanuvchi id: %s", id)
})
req := httptest.NewRequest("GET", "/users/42", nil)
rec := httptest.NewRecorder()
mux.ServeHTTP(rec, req)
fmt.Println(rec.Body.String())
}"GET /users/{id}" yozuvida GET — faqat shu metodga mos kelishini, {id} esa "bu joyda istalgan qiymat bo'lishi mumkin, uni id deb belgila" degan o'zgaruvchan qismni bildiradi. Handler ichida r.PathValue("id") orqali o'sha qiymatni olamiz. Bu — API'larda /users/42, /users/100 kabi son-son yo'llarni bitta handler bilan boshqarishning standart usuli.
>_ Exercise
Mahsulot ID'si bo'yicha ma'lumot qaytaradigan yo'l yozing.
- •"GET /products/{id}" yo'lini ro'yxatdan o'tkazing
- •r.PathValue("id") ni oling
- •"mahsulot: <id>" ko'rinishida javob bering
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
{nom} shablonlari va r.PathValue(nom) yordamida bitta handler ko'plab o'xshash yo'llarga (masalan turli ID'lar) xizmat qila oladi.
NEXT UP
Request Body Parsing
$ go run main.go
Kodingizni ishga tushiring