Žiniatinklio maršrutas yra HTTP užklausų priskyrimo tvarkyklės funkcijoms, veikiančioms nurodytu URL keliu, metodas. Maršrutas dažnai naudojamas kuriant vieno puslapio programas (SPA) ir API. Maršrutizatoriuje kodas apibrėžia veiksmų seką, lydinčią vartotojo užklausą.
Standartinė Go biblioteka turi daugumą funkcijų, kurių prireiks kuriant žiniatinklio programas, įskaitant maršruto parinkimą. Galite naudoti ServeMux įveskite net/http pagrindinio maršruto tvarkymo paketas. Jei jums reikia sudėtingesnio maršruto tvarkymo, galite rinktis iš daugybės maršruto parinkimo paketų.
Maršruto parinkimo „Go“ pradžia
„Go“ ekosistemoje yra maršruto parinkimo paketai, kurie abstrahuoja tai, kas nereikalinga, ir palengvina žiniatinklio programų ir paslaugų kūrimą.
Daugelis „Go“ žiniatinklio sistemų įgyvendina kai kuriuos iš šių maršruto paketų.
Štai paprastas struktūros modelis JSON atsakymą grįšite klientui šioje mokymo programoje.
tipo Informacija struktūra {
Pranešimas styga`json:"pranešimas"`
apibūdinimas styga`json:"description"'
}
Dauguma Go maršrutizatorių vis dar naudoja net/http ResponseWriter ir Prašymas metodus kaip parametrus tvarkyklės funkcijose.
funcSveiki(rašytojas http. ResponseWriter, užklausa *http. užklausa) {
// tvarkyklės funkcijos verslo logika čia
}
Be to, turėsite paleisti serverį su KlausykIr Tarnaukite būdas paleisti serverį daugelyje paketų.
klaida := http. ListenAndServe (":8000", maršrutizatorius)
jeigu klysta! = nulis {
grąžinti
}
Štai keletas populiarių maršruto parinkimo paketų Go ekosistemoje.
1. „Gorilla Mux“ maršrutizatorius
„Gorilla Mux“ paketas įgyvendina ir užklausų maršrutizatorių, ir užklausų dispečerį HTTP užklausoms. Tai kaip http. ServeMux metodas, bet su papildomomis funkcijomis.
„Gorilla Mux“ maršrutizatorius įgyvendina http. Prižiūrėtojas sąsaja ir jos metodai yra suderinami su ServeMux metodas. Paketas taip pat įgyvendina kelias URL schemas ir galite naudoti maršrutizatorius kaip antrinius maršrutizatorius (įdėtus maršrutus), kad apibrėžtumėte panašius maršrutus.
The Gorilla Mux paketas yra „Gorilla“ žiniatinklio įrankių rinkinio dalis. Įrankių rinkinyje yra su žiniatinkliu susijusių paketų, skirtų daugeliui problemų išspręsti kad vartotojai būtų prisijungę prie seansų duomenų saugojimui naudojant slapukus.
Paleiskite šią komandą savo darbo srities terminale, kad įdiegtumėte „Gorilla Mux“ paketą.
eik get -u github.com/gorilla/mux
Štai kaip galite nustatyti a GAUTI užklausos maršrutas į tvarkyklės funkciją, kuri koduoja JSON atsakymą su „Gorilla Mux“ paketu.
importuoti (
"kodavimas/json"
„github.com/gorilla/mux“
"rąstas"
"net/http"
)funcSveiki(rašytojas http. ResponseWriter, užklausa *http. užklausa) {
atsakymas := Informacija {
Žinutė: „Sėkmės“,
Aprašymas: "Jūs sėkmingai parašėte klientui",
}klaida := json. NewEncoder (rašytojas).Kodavimas (atsakymas)
jeigu klysta! = nulis {
žurnalas. Fatalln (klysta)
}
}funcpagrindinis() {
maršrutizatorius := mux. Naujas maršrutizatorius ()
maršrutizatorius. HandleFunc ("/labas", labas). Metodai ("GET")
klaida := http. ListenAndServe (":8000", maršrutizatorius)
jeigu klysta! = nulis {
grąžinti
}
}
The Sveiki tvarkyklės funkcija užkoduoja struktūrą į JSON, naudodama Užkoduoti metodas NewEncoder struktūra.
The pagrindinis funkcija priskiria naują „Gorilla Mux“ maršrutizatoriaus egzempliorių maršrutizatorius kintamasis. Tada jis vadina HandleFunc būdas susieti maršrutą su prižiūrėtojo funkcija. Galite naudoti Metodai būdas nurodyti užklausos tipą.
2. „Chi“ maršrutizatorius
The Chi maršrutizatorius yra lengvas, greitas, sukomponuojamas maršruto parinktuvas, skirtas kurti HTTP pagrindu veikiančias žiniatinklio paslaugas Go. „Chi“ maršrutizatorius yra suderinamas su http paketą, o maršrutizatoriui nėra išorinių priklausomybių.
Skirtingai nuo daugelio maršrutizatorių, Chi suteikia konteksto valdymą su kontekste paketą, kad būtų galima laiku apdoroti užklausą.
Su šia komanda įdiekite „Chi“ maršrutizatorių į „Go“ modulius.
eik gauti github.com/eik-chi / chi
Maršrutizavimas naudojant „Gorilla Mux“ ir „Chi“ maršrutizatorių yra labai panašus. Štai kaip galite nustatyti panašų GAUTI užklausa, kuri užkoduoja struct į JSON kaip atsakymą.
importuoti (
"kodavimas/json"
"github.com/eik-chi/chi/v5"
"rąstas"
"net/http"
)funcpagrindinis() {
maršrutizatorius := chi. Naujas maršrutizatorius ()
maršrutizatorius. Gaukite ("/labas", labas)
klaida := http. ListenAndServe (":8000", maršrutizatorius)jeigu klysta! = nulis {
grąžinti
}
}funcSveiki(rašytojas http. ResponseWriter, užklausa *http. užklausa) {
atsakymas := Informacija {
Žinutė: „Sėkmės“,
Aprašymas: "Jūs sėkmingai parašėte klientui",
}klaida := json. NewEncoder (rašytojas).Kodavimas (atsakymas)
jeigu klysta! = nulis {
žurnalas. Fatalln (klysta)
}
}
The Sveiki tvarkyklės funkcija yra tvarkyklės funkcija GAUTI prašymas.
Viduje pagrindinis funkcija, maršrutizatorius kintamasis yra Chi maršrutizatoriaus egzempliorius. Užklausos metodą galite nurodyti metodo pavadinimu; tokiu atveju, Gauk kaip parametrus priima maršruto ir tvarkyklės funkcijos identifikatorių.
3. „HttpRouter“ paketas
The HttpRouter paketas yra labai našus, lengvas užklausų multiplekseris. Tai suteikia daugiau funkcionalumo nei ServeMux http paketo įgyvendinimas.
„HttpRouter“ paketas turi nedidelį atminties plotą, didelį našumą ir gerą mastelio keitimą. Tai vienas seniausių ir dažniausiai naudojamų maršrutizatorių Go ekosistemoje, įdiegtas daugelyje populiarios Go karkasai, įskaitant Džino biblioteka.
Vykdydami šią komandą savo darbo katalogo terminale, bus įdiegtas „HttpRouter“ paketas.
eik Gaukite github.com/julienschmidt/httprouter
Maršrutizavimas naudojant „HttpRouter“ šiek tiek skiriasi nuo „Chi“ ir „Gorilla Mux“ maršrutizatorių.
Štai kaip galite nustatyti paprastą GET užklausą naudodami „HttpRouter“ paketą.
importuoti (
"kodavimas/json"
„github.com/julienschmidt/httprouter“
"rąstas"
"net/http"
)funcpagrindinis() {
maršrutizatorius := http maršrutizatorius. Naujas ()
maršrutizatorius. GET("/labas", labas)
klaida := http. ListenAndServe (":8000", maršrutizatorius)jeigu klysta! = nulis {
grąžinti
}
}funcSveiki(rašytojas http. ResponseWriter, užklausa *http. Prašymas, _ httprouter. Paramos) {
atsakymas := Informacija {
Žinutė: „Sėkmės“,
Aprašymas: „Sėkmingai pasiekėte API galinį tašką“,
}klaida := json. NewEncoder (rašytojas).Kodavimas (atsakymas)
jeigu klysta! = nulis {
žurnalas. Fatalln (klysta)
}
}
HttpRouter paketo tvarkyklės funkcijos turi turėti Paramos HTTP maršrutizatoriaus metodas.
The maršrutizatorius kintamasis yra HttpRouter pavyzdys. Galite nustatyti GET užklausą naudodami GAUTI metodas, kuris paima maršrutą ir tvarkyklės funkcijos identifikatorių.
4. Pat Router
Pat yra Sinatros stiliaus HTTP užklausų multiplekseris, veikiantis su Go net/http paketu. Pat maršrutizatorius neturi jokių kitų funkcijų, išskyrus maršruto parinkimą.
Paleiskite šią komandą savo darbo kataloge, kad įdiegtumėte Pat Router
eik gaukite github.com/bmizerany/pat
Pat maršrutizatorius įgyvendina panašias funkcijas kaip ServeMux metodas.
Štai kaip galite tvarkyti užklausų nukreipimą naudodami paglostyti paketą.
importuoti (
"kodavimas/json"
"github.com/bmizerany/pat"
"rąstas"
"net/http"
)funcSveiki(rašytojas http. ResponseWriter, užklausa *http. užklausa) {
atsakymas := Informacija {
Žinutė: „Sėkmės“,
Aprašymas: „Sėkmingai pasiekėte galutinį tašką“,
}klaida := json. NewEncoder (rašytojas).Kodavimas (atsakymas)
jeigu klysta! = nulis {
žurnalas. Fatalln („klaida“)
}
}funcpagrindinis() {
maršrutizatorius := pat. Naujas () // maršrutizatoriaus egzempliorius
maršrutizatorius. Gauti ("/labas", http. HandlerFunc (labas))
http. Rankena ("/", maršrutizatorius)
klaida := http. ListenAndServe (":12345", nulis)
jeigu klysta! = nulis {
žurnalas. Fatal ("ListenAndServe: ", err)
}
}
The Nauja metodas grąžina maršrutizatoriaus egzempliorių. Turėsite apvynioti tvarkyklės funkciją su HandlerFunc metodas. Tada galite naudoti Rankena būdas nurodyti šakninį kelią ir prijungti maršrutizatoriaus egzempliorių prieš paleisdamas serverį.
Sukurti maršrutizatorių nėra taip sunku
Visi šiame straipsnyje nurodyti maršrutizatoriai įgyvendina tinklo ir http paketų funkcijas. Galite peržiūrėti ServeMux metodo dokumentaciją, kad sužinotumėte, kaip atkurti maršrutizatorių su papildomomis funkcijomis, kad atitiktų jūsų poreikius.
Tokiose sistemose kaip „Gin“ ir „Fiber“ yra maršruto parinkimo funkcija iš tinklo paketo arba jį įgyvendinančių išorinių paketų.