A webes útválasztás egy olyan technika, amely HTTP-kérelmeket rendel hozzá a megadott URL-útvonalon működő kezelő függvényekhez. Az útválasztást gyakran használják egyoldalas alkalmazások (SPA-k) és API-k létrehozására. Az útválasztóban a kód határozza meg a felhasználó kérését kísérő műveletek sorrendjét.
A Go standard könyvtára rendelkezik a webalkalmazások készítéséhez szükséges funkciók nagy részével, beleértve az útválasztást is. Használhatja a ServeMux írja be a net/http csomag az alapvető útvonalkezeléshez. Ha összetettebb útvonalkezelésre van szüksége, akkor rengeteg útválasztási csomag közül választhat.
Kezdő lépések az útválasztással a Go-ban
A Go ökoszisztémája olyan útválasztási csomagoknak ad otthont, amelyek elvonatkoztatják a szükségtelent, és megkönnyítik a webes alkalmazások és szolgáltatások létrehozását.
Sok Go webes keretrendszer megvalósítja ezen útválasztási csomagok egy részét.
Íme egy egyszerű szerkezeti modell a JSON választ küldi vissza az ügyfélnek ebben az oktatóanyagban.
típus Info struct {
Üzenet húr`json:"üzenet"`
Leírás húr`json:"leírás"`
}
A legtöbb Go útválasztó továbbra is a net/http-t használja ResponseWriter és Kérés metódusokat, mint paramétereket a kezelő függvényekben.
funcSzia(író http. ResponseWriter, kérje a *http. Kérés) {
// kezelő függvény üzleti logika itt
}
Ezenkívül el kell indítania egy szervert a ListenAndServe módszer a szerver indítására a legtöbb csomagban.
hiba := http. ListenAndServe(":8000", router)
ha hiba! = nulla {
Visszatérés
}
Íme néhány népszerű útválasztó csomag a Go ökoszisztémában.
1. A Gorilla Mux Router
A Gorilla Mux csomag egy kérés útválasztót és egy kérelem diszpécsert is megvalósít a HTTP kérésekhez. Ez olyan, mint a http. ServeMux módszerrel, de hozzáadott funkcionalitással.
A Gorilla Mux router megvalósítja a http. Kezelő interfész és módszerei kompatibilisek a ServeMux módszer. A csomag több URL-sémát is megvalósít, és az útválasztókat alútválasztóként (beágyazott útvonalakként) használhatja hasonló útvonalak meghatározásához.
Az Gorilla Mux csomag része a Gorilla webes eszközkészletének. Az eszköztár webhez kapcsolódó csomagokat tartalmaz számos probléma megoldásához a felhasználók bejelentkezve a Sessions szolgáltatással az adattároláshoz Cookie-k segítségével.
Futtassa ezt a parancsot a munkaterület termináljában a Gorilla Mux csomag telepítéséhez.
megy get -u github.com/gorilla/mux
Így állíthatja be a KAP kérési útvonalat egy kezelő függvényhez, amely a Gorilla Mux csomaggal JSON-választ kódol.
import (
"kódolás/json"
"github.com/gorilla/mux"
"napló"
"net/http"
)funcSzia(író http. ResponseWriter, kérje a *http. Kérés) {
válasz := Info {
Üzenet: "Siker",
Leírás: "Sikeresen írt az ügyfélnek",
}hiba := json. NewEncoder (író). Kódolás (válasz)
ha hiba! = nulla {
log. Fatalln (hiba)
}
}funcfő-() {
router := mux. NewRouter()
router. HandleFunc("/hello", hello). Methods("GET")
hiba := http. ListenAndServe(":8000", router)
ha hiba! = nulla {
Visszatérés
}
}
Az Szia A kezelő függvény a struktúrát JSON-ba kódolja a Kódol módszere a NewEncoder struct.
Az fő- függvény új Gorilla Mux útválasztó példányt rendel a router változó. Ezután hívja a HandleFunc módszer az útvonal leképezésére a kezelő funkcióhoz. Használhatja a Mód módszer a kérés típusának megadásához.
2. A Chi Router
Az Chi Router egy könnyű, gyors, összeállítható útválasztó HTTP-alapú webszolgáltatások létrehozásához a Go-ban. A Chi router kompatibilis a http csomagot, és nincsenek külső függőségek az útválasztóhoz.
Sok útválasztótól eltérően a Chi kontextusvezérlést biztosít a kontextus csomag a kérések időben történő kezeléséhez.
Ezzel a paranccsal telepítse a Chi útválasztót a Go moduljaira.
megy szerezd be a github.com/megy-chi/chi
A Gorilla Mux routerrel és a Chi routerrel történő útválasztás nagyon hasonló. Így állíthat be hasonlót KAP kérés, amely válaszként a struct-ot kódolja JSON-ba.
import (
"kódolás/json"
"github.com/megy-chi/chi/v5"
"napló"
"net/http"
)funcfő-() {
router := chi. NewRouter()
router. Get("/hello", hello)
hiba := http. ListenAndServe(":8000", router)ha hiba! = nulla {
Visszatérés
}
}funcSzia(író http. ResponseWriter, kérje a *http. Kérés) {
válasz := Info {
Üzenet: "Siker",
Leírás: "Sikeresen írt az ügyfélnek",
}hiba := json. NewEncoder (író). Kódolás (válasz)
ha hiba! = nulla {
log. Fatalln (hiba)
}
}
Az Szia A kezelő funkció a kezelő funkciója a KAP kérés.
Ban,-ben fő- funkció, a router változó egy Chi router példány. Megadhat egy kérési metódust a metódus nevével; ebben az esetben, Kap paraméterként veszi az útvonal és a kezelő függvény azonosítóját.
3. A HttpRouter csomag
Az HttpRouter csomag egy nagy teljesítményű, könnyű kérés multiplexer. Több funkcionalitást biztosít, mint a ServeMux http csomag megvalósítása.
A HttpRouter csomag kis memóriaterülettel, nagy teljesítménnyel és jó skálázhatósággal rendelkezik. Ez az egyik legrégebbi és leggyakrabban használt útválasztó a Go ökoszisztémában, amelyet sok esetben alkalmaznak népszerű Go keretrendszerek, beleértve a Gin könyvtár.
A parancs futtatása a munkakönyvtár terminálján telepíti a HttpRouter csomagot.
megy töltse le a github.com/julienschmidt/httprouter webhelyet
A HttpRouterrel végzett útválasztás kissé eltér a Chi és Gorilla Mux útválasztóktól.
Így állíthat be egy egyszerű GET-kérést a HttpRouter csomaggal.
import (
"kódolás/json"
"github.com/julienschmidt/httprouter"
"napló"
"net/http"
)funcfő-() {
router := httprouter. Új()
router. GET("/hello", hello)
hiba := http. ListenAndServe(":8000", router)ha hiba! = nulla {
Visszatérés
}
}funcSzia(író http. ResponseWriter, kérje a *http. Kérelem, _ httprouter. paraméterek) {
válasz := Info {
Üzenet: "Siker",
Leírás: "Sikeresen elérte az API végpontot",
}hiba := json. NewEncoder (író). Kódolás (válasz)
ha hiba! = nulla {
log. Fatalln (hiba)
}
}
A HttpRouter csomag kezelőfunkcióinak rendelkezniük kell a Params a HTTP útválasztó módszere.
Az router változó a HttpRouter egy példánya. GET kérést állíthat be a KAP metódus, amely beveszi az útvonalat és a kezelő függvény azonosítóját.
4. A Pat Router
Pat egy Sinatra-stílusú HTTP-kérés multiplexer, amely a Go net/http csomagjával működik. A Pat routernek nincs más funkciója az útválasztáson kívül.
Futtassa ezt a parancsot a munkakönyvtárában a Pat Router telepítéséhez
megy töltse le a github.com/bmizerany/pat
A Pat router hasonló funkciókat valósít meg, mint a ServeMux módszer.
Így kezelheti a kérések átirányítását a pat csomag.
import (
"kódolás/json"
"github.com/bmizerany/pat"
"napló"
"net/http"
)funcSzia(író http. ResponseWriter, kérje a *http. Kérés) {
válasz := Info {
Üzenet: "Siker",
Leírás: "Sikeresen elérte a végpontot",
}hiba := json. NewEncoder (író). Kódolás (válasz)
ha hiba! = nulla {
log. Fatalln ("hiba")
}
}funcfő-() {
router := pat. Új() // router példány
router. Get("/hello", http. HandlerFunc (helló))
http. Handle ("/", útválasztó)
hiba := http. ListenAndServe(":12345", nulla)
ha hiba! = nulla {
log. Fatal ("ListenAndServe: ", err)
}
}
Az Új metódus egy útválasztó példányt ad vissza. A kezelő funkciót a HandlerFunc módszer. Ezután használhatja a Fogantyú módszerrel megadhatja a gyökér elérési útját és csatlakoztathatja az útválasztó példányt a kiszolgáló elindítása előtt.
A router megépítése nem olyan nehéz
A cikkben szereplő összes útválasztó a net és a http csomagokból származó funkciókat valósítja meg. Tekintse meg a ServeMux módszer dokumentációját, hogy megtanulja, hogyan replikálhat egy útválasztót extra funkciókkal az Ön igényeinek megfelelően.
Az olyan keretrendszerek, mint a Gin és a Fiber, tartalmaznak útválasztási funkciókat a hálózati csomagból vagy az azt megvalósító külső csomagokból.