Veebimarsruutimine on meetod HTTP-päringute määramiseks töötleja funktsioonidele, mis töötavad määratud URL-i teel. Marsruutimist kasutatakse sageli üheleheliste rakenduste (SPA-de) ja API-de loomiseks. Ruuteris määratleb kood kasutaja päringuga kaasnevate toimingute jada.

Go standardteegil on enamik funktsioone, mida vajate veebirakenduste loomiseks, sealhulgas marsruutimine. Võite kasutada ServeMux tippige sisse net/http pakett marsruudi põhikäsitluseks. Kui vajate keerukamat marsruudihaldust, on valikus palju marsruutimispakette.

Marsruutimise alustamine Go-s

Go ökosüsteem on koduks marsruutimispakettidele, mis abstraheerivad mittevajaliku ning hõlbustavad veebirakenduste ja -teenuste loomist.

Paljud Go veebiraamistikud rakendavad mõnda neist marsruutimispakettidest.

Siin on lihtne struktuurimudel JSON vastuse saate selles õpetuses kliendile tagasi.

tüüp Info struktuur {
Sõnum string`json:"sõnum"".
Kirjeldus string`json:"kirjeldus"`
}

Enamik Go ruutereid kasutab endiselt võrku net/http ResponseWriter ja Taotlus meetodid parameetritena käitleja funktsioonides.

instagram viewer
funcTere(kirjanik http. ResponseWriter, päring *http. taotlus) {
// käitleja funktsiooni äriloogika siin
}

Samuti peate käivitama serveri rakendusega Kuula ja teeninda meetod serveri käivitamiseks enamikus pakettides.

viga := http. ListenAndServe(":8000", ruuter)

kui eks!= null {
tagasi
}

Siin on mõned Go ökosüsteemi populaarsed marsruutimispaketid.

1. Gorilla Mux ruuter

Gorilla Muxi pakett rakendab HTTP-päringute jaoks nii päringu ruuterit kui ka päringu dispetšerit. See on nagu http. ServeMux meetod, kuid lisafunktsiooniga.

Gorilla Muxi ruuter rakendab http. Käitleja liides ja selle meetodid ühilduvad ServeMux meetod. Pakett rakendab ka mitut URL-i skeemi ja sarnaste marsruutide määratlemiseks saate ruutereid kasutada alamruuteritena (pesastatud marsruutidena).

The Gorilla Mux pakett on osa Gorilla veebitööriistakomplektist. Tööriistakomplekt sisaldab veebiga seotud pakette paljude probleemide lahendamiseks kasutajate seanssidega sisselogituna hoidmine andmete salvestamiseks küpsiste abil.

Käivitage see käsk oma tööruumi terminalis, et installida pakett Gorilla Mux.

mine get -u github.com/gorilla/mux

Siit saate teada, kuidas saate seadistada a SAADA taotleda marsruuti käitleja funktsioonile, mis kodeerib Gorilla Muxi paketiga JSON-vastust.

importida (
"kodeering/json"
"github.com/gorilla/mux"
"logi"
"net/http"
)

funcTere(kirjanik http. ResponseWriter, päring *http. taotlus) {
vastus := Info {
Sõnum: "Edu",
Kirjeldus: "Oled edukalt kliendile kirjutanud",
}

eksitus := json. NewEncoder (kirjutaja). Kodeerimine (vastus)

kui eks!= null {
logi. Fatalln (viga)
}
}

funcpeamine() {
ruuter := mux. Uus ruuter()
ruuter. HandleFunc("/tere", tere).Meetodid("GET")
viga := http. ListenAndServe(":8000", ruuter)

kui eks!= null {
tagasi
}
}

The Tere Käsitleja funktsioon kodeerib struktuuri JSON-iks, kasutades Kodeerida meetod Uus kodeerija struktuur.

The peamine funktsioon määrab uue Gorilla Muxi ruuteri eksemplari ruuter muutuv. Seejärel kutsub see üles HandleFunc meetod marsruudi kaardistamiseks käitleja funktsiooniga. Võite kasutada meetodid meetod päringu tüübi määramiseks.

2. Chi ruuter

The Chi ruuter on kerge, kiire, komponeeritav ruuter HTTP-põhiste veebiteenuste loomiseks Go-s. Chi ruuter ühildub http paketti ja ruuteril pole väliseid sõltuvusi.

Erinevalt paljudest ruuteritest pakub Chi kontekstijuhtimist kontekst pakett taotluste õigeaegseks käsitlemiseks.

Selle käsuga installige Chi ruuter oma Go moodulitesse.

mine hankige github.com/mine-chi/chi

Marsruutimine Gorilla Muxi ruuteri ja Chi ruuteriga on väga sarnane. Siit saate teada, kuidas saate sarnase seadistada SAADA taotlus, mis kodeerib vastusena structi JSON-i.

importida (
"kodeering/json"
"github.com/mine-chi/chi/v5"
"logi"
"net/http"
)

funcpeamine() {
ruuter := chi. Uus ruuter()
ruuter. Get("/tere", tere)
viga := http. ListenAndServe(":8000", ruuter)

kui eks!= null {
tagasi
}
}

funcTere(kirjanik http. ResponseWriter, päring *http. taotlus) {
vastus := Info {
Sõnum: "Edu",
Kirjeldus: "Oled edukalt kliendile kirjutanud",
}

eksitus := json. NewEncoder (kirjutaja). Kodeerimine (vastus)

kui eks!= null {
logi. Fatalln (viga)
}
}

The Tere käitleja funktsioon on käitleja funktsioon SAADA nõuda.

Aastal peamine funktsioon, ruuter muutuja on Chi ruuteri eksemplar. Meetodi nimega saate määrata päringumeetodi; sel juhul, Hangi võtab parameetritena sisse marsruudi ja käitleja funktsiooni identifikaatori.

3. HttpRouteri pakett

The HttpRouter pakett on suure jõudlusega, kerge multiplekser. See pakub rohkem funktsioone kui ServeMux http-paketi rakendamine.

HttpRouteri paketil on väike mälumaht, suur jõudlus ja hea skaleeritavus. See on Go ökosüsteemi üks vanimaid ja enim kasutatud ruutereid, mida on rakendatud paljudes populaarsed Go raamistikud, kaasa arvatud Gini raamatukogu.

Selle käsu käivitamine oma töökataloogi terminalis installib paketi HttpRouter.

mine hankige github.com/julienschmidt/httprouter

Marsruutimine HttpRouteriga erineb veidi Chi ja Gorilla Muxi ruuteritest.

Siit saate teada, kuidas saate HttpRouteri paketiga seadistada lihtsa GET-päringu.

importida (
"kodeering/json"
"github.com/julienschmidt/httprouter"
"logi"
"net/http"
)

funcpeamine() {
ruuter := httpruuter. Uus()
ruuter. GET("/tere", tere)
viga := http. ListenAndServe(":8000", ruuter)

kui eks!= null {
tagasi
}
}

funcTere(kirjanik http. ResponseWriter, päring *http. Taotlus, _ httpruuter. Parameetrid) {
vastus := Info {
Sõnum: "Edu",
Kirjeldus: "Olete edukalt tabanud API lõpp-punkti",
}

eksitus := json. NewEncoder (kirjutaja). Kodeerimine (vastus)

kui eks!= null {
logi. Fatalln (viga)
}
}

Paketi HttpRouter käitleja funktsioonidel peab olema Parameetrid HTTP-ruuteri meetod.

The ruuter muutuja on HttpRouteri eksemplar. Saate seadistada GET-päringu rakendusega SAADA meetod, mis võtab marsruudi ja käitleja funktsiooni identifikaatori.

4. Pat-ruuter

Pat on Sinatra stiilis HTTP päringu multiplekser, mis töötab Go net/http paketiga. Pat-ruuteril pole peale marsruutimise muid funktsioone.

Käivitage see käsk oma töökataloogis, et installida Pat Router

mine hankige github.com/bmizerany/pat

Pat ruuter rakendab sarnaseid funktsioone ServeMux meetod.

Siit saate teada, kuidas saate rakendusega marsruutimise taotlust käsitleda pai pakett.

importida (
"kodeering/json"
"github.com/bmizerany/pat"
"logi"
"net/http"
)

funcTere(kirjanik http. ResponseWriter, päring *http. taotlus) {
vastus := Info {
Sõnum: "Edu",
Kirjeldus: "Olete edukalt jõudnud lõpp-punkti",
}

eksitus := json. NewEncoder (kirjutaja). Kodeerimine (vastus)

kui eks!= null {
logi. Fatalln ("err")
}
}

funcpeamine() {
ruuter := pat. Uus() // ruuteri eksemplar
ruuter. Get("/tere", http. HandlerFunc (tere))
http. Käepide ("/", ruuter)
viga := http. ListenAndServe(":12345", null)

kui eks!= null {
logi. Fatal ("ListenAndServe: ", err)
}
}

The Uus meetod tagastab ruuteri eksemplari. Peate töötleja funktsiooni pakkima HandlerFunc meetod. Seejärel saate kasutada Käepide meetod juurtee määramiseks ja ruuteri eksemplari ühendamiseks enne serveri käivitamist.

Ruuteri ehitamine pole nii keeruline

Kõik selle artikli ruuterid rakendavad võrgu- ja http-pakettide funktsioone. Saate vaadata ServeMuxi meetodi dokumentatsiooni, et saada teada, kuidas ruuterit oma vajadustele vastava lisafunktsiooniga kopeerida.

Sellised raamistikud nagu Gin ja Fiber sisaldavad marsruutimise funktsioone võrgupaketist või seda rakendavatest välistest pakettidest.