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.

instagram viewer
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.