gorilla/mux bilan routing
github.com/gorilla/mux — Go uchun eng mashhur routerlardan biri. U uzoq yillar davomida Go’da REST API yozishning deyarli standart vositasi bo‘lib keldi. Ko‘plab mavjud loyihalar, darsliklar va kutubxonalar undan foydalanadi.
Go 1.22 versiyasigacha standart http.ServeMux juda sodda edi. Unda HTTP metodi bo‘yicha routing ham, /books/{id} kabi yo‘l parametrlari ham yo‘q edi. gorilla/mux aynan shu bo‘shliqni to‘ldirgan.
Nima uchun hali ham o‘rganish kerak?
Go 1.22 dan keyin standart router metod va yo‘l parametrlarini qo‘llab-quvvatlaydi. Shunday bo‘lsa-da, gorilla/muxni bilish foydali:
- Mavjud loyihalar. Ishga kirganingizda ko‘p hollarda
gorilla/muxasosida yozilgan kodga duch kelasiz. - Qo‘shimcha imkoniyatlar. Yo‘l parametrlarida regex, query parametrlar bo‘yicha moslashtirish, subrouter’lar, marshrutga nom berib URL yasash,
Host, sarlavha va sxema bo‘yicha routing. - Tanlovni asoslash. Standart router,
gorilla/muxva framework’lar o‘rtasidagi farqni bilsangiz, loyihangiz uchun ongli tanlov qila olasiz.
Standart router bilan solishtirish
| Imkoniyat | http.ServeMux (Go 1.22+) |
gorilla/mux |
|---|---|---|
| Metod bo‘yicha routing | ✅ "GET /books" |
✅ .Methods("GET") |
| Yo‘l parametrlari | ✅ {id} |
✅ {id} |
| Parametrda regex | ❌ | ✅ {id:[0-9]+} |
| Query bo‘yicha moslashtirish | ❌ | ✅ .Queries("page", "{page}") |
| Sarlavha, host, sxema bo‘yicha | Faqat host | ✅ .Headers(), .Host(), .Schemes() |
| Subrouter’lar | Qo‘lda, alohida mux orqali | ✅ .PathPrefix().Subrouter() |
| Router darajasidagi middleware | Qo‘lda o‘raladi | ✅ r.Use(...) |
| Nomli marshrutdan URL yasash | ❌ | ✅ .Name("book").URL(...) |
405 va Allow sarlavhasi |
✅ avtomatik | 405, lekin Allow sarlavhasisiz |
| Tashqi bog‘liqlik | Yo‘q | Bitta modul |
Loyiha holati
gorilla tashkiloti 2022-yil oxirida qo‘llab-quvvatlovchilar yetishmagani sababli o‘z repozitoriylarini arxivlagan edi. 2023-yilda loyiha yangi jamoa tomonidan qayta faollashtirildi. Hozirgi barqaror versiya v1.8.1.
Kutubxona yetuk va barqaror. Unga yangi imkoniyatlar kam qo‘shiladi, asosan xatolar tuzatiladi. Yangi loyiha boshlashdan oldin repozitoriydagi so‘nggi faollikni va chiqarilgan versiyalarni o‘zingiz tekshirib ko‘ring.
O‘rnatish
Birinchi tanishuv
Birinchi qarashda standart routerga o‘xshaydi. Farqi {id:[0-9]+} qismida: parametr faqat raqamlardan iborat bo‘lsagina marshrut mos keladi. abc qiymati regex’ga mos kelmagani uchun handler umuman chaqirilmadi.
Bo‘lim rejasi
| Dars | Mavzu |
|---|---|
| Framework kerakmi? | Standart kutubxona, router va framework: qachon nima tanlanadi |
| mux bilan router yaratish | Router, marshrutlar, metodlar, 404 va 405 handlerlari |
| Path parametrlari | mux.Vars, regex, query moslashtirish, URL yasash |
| Subroutes | Marshrutlarni guruhlash va API versiyalash |
| Middleware integratsiyasi | r.Use, subrouter middleware’lari va ularning xususiyatlari |
Bo‘lim davomida avvalgi bo‘limlarda yozilgan kitoblar API’sini gorilla/mux bilan qayta tuzamiz. Birinchi darsda esa "umuman framework kerakmi?" degan savolga javob beramiz.