Web usmjeravanje je tehnika dodjele HTTP zahtjeva funkcijama rukovatelja koje rade na navedenoj URL stazi. Usmjeravanje se često koristi za izradu jednostraničkih aplikacija (SPA) i API-ja. Kod usmjerivača definira slijed radnji koje prate zahtjev korisnika.

Standardna biblioteka Go ima većinu funkcionalnosti koje ćete trebati za izradu web aplikacija, uključujući usmjeravanje. Možete koristiti ServeMux upišite net/http paket za osnovno upravljanje rutom. Ako trebate složenije rukovanje rutom, postoji mnogo paketa usmjeravanja koje možete izabrati.

Početak rada s usmjeravanjem u Gou

Goov ekosustav dom je paketa za usmjeravanje koji apstrahiraju nepotrebno i olakšavaju izradu web aplikacija i usluga.

Mnogi Go web okviri implementiraju neke od ovih paketa usmjeravanja.

Evo jednostavnog modela strukture za JSON odgovor koji ćete vratiti klijentu u ovom vodiču.

tip Info strukturirati {
Poruka niz`json:"poruka"`
Opis niz`json:"opis"`
}

Većina Go rutera još uvijek koristi net/http ResponseWriter i Zahtjev metode kao parametri u funkcijama rukovatelja.

instagram viewer
funkzdravo(pisac http. ResponseWriter, zahtjev *http. Zahtjev) {
// poslovna logika funkcije rukovatelja ovdje
}

Također, morat ćete pokrenuti poslužitelj s Slušajte i služite metoda za pokretanje poslužitelja u većini paketa.

pogriješiti := http. ListenAndServe(":8000", usmjerivač)

ako pogriješiti != nula {
povratak
}

Evo nekih od popularnih paketa usmjeravanja u Go ekosustavu.

1. Gorilla Mux usmjerivač

Paket Gorilla Mux implementira usmjerivač zahtjeva i otpremnik zahtjeva za HTTP zahtjeve. To je poput http. ServeMux metoda, ali s dodatnom funkcionalnošću.

Usmjerivač Gorilla Mux implementira http. rukovatelj sučelje i njegove metode kompatibilne su s ServeMux metoda. Paket također implementira više URL shema i možete koristiti usmjerivače kao podusmjerivače (ugniježđene rute) za definiranje sličnih ruta.

The Gorilla Mux paket je dio Gorilla web alata. Skup alata uključuje pakete povezane s webom za rješavanje mnogih problema zadržavanje korisnika prijavljenima putem Sesija na pohranu podataka pomoću kolačića.

Pokrenite ovu naredbu na terminalu vašeg radnog prostora da biste instalirali paket Gorilla Mux.

ići dobiti -u github.com/gorilla/mux

Evo kako možete postaviti a DOBITI ruta zahtjeva do funkcije rukovatelja koja kodira u JSON odgovor s paketom Gorilla Mux.

uvoz (
"kodiranje/json"
"github.com/gorilla/mux"
"log"
"net/http"
)

funkzdravo(pisac http. ResponseWriter, zahtjev *http. Zahtjev) {
odgovor := Info {
Poruka: "Uspjeh",
Opis: "Uspješno ste pisali klijentu",
}

pogreška := json. NewEncoder (pisac).Encode (odgovor)

ako pogriješiti != nula {
log. Fataln (greška)
}
}

funkglavni() {
usmjerivač := mux. NewRouter()
ruter. HandleFunc("/hello", hello).Methods("GET")
pogriješiti := http. ListenAndServe(":8000", usmjerivač)

ako pogriješiti != nula {
povratak
}
}

The zdravo funkcija rukovatelja kodira strukturu u JSON pomoću Kodiraj metoda NewEncoder strukturirati

The glavni dodjeljuje novu instancu usmjerivača Gorilla Mux ruter varijabla. Zatim poziva HandleFunc metoda mapiranja rute u funkciju rukovatelja. Možete koristiti Metode metoda za određivanje vrste zahtjeva.

2. Chi ruter

The Chi ruter je lagani, brzi usmjerivač koji se može sastaviti za izgradnju web usluga temeljenih na HTTP-u u Go. Chi ruter je kompatibilan s http paket i nema vanjskih ovisnosti za usmjerivač.

Za razliku od mnogih usmjerivača, Chi pruža kontrolu konteksta s kontekst paket za pravovremenu obradu zahtjeva.

Ovom naredbom instalirajte Chi ruter na svoje Go module.

ići dobiti github.com/ići-chi/chi

Usmjeravanje s usmjerivačem Gorilla Mux i usmjerivačem Chi vrlo je slično. Evo kako možete postaviti sličan DOBITI zahtjev koji kodira strukturu u JSON kao odgovor.

uvoz (
"kodiranje/json"
"github.com/ići-chi/chi/v5"
"log"
"net/http"
)

funkglavni() {
ruter := chi. NewRouter()
ruter. Get("/zdravo", zdravo)
pogriješiti := http. ListenAndServe(":8000", usmjerivač)

ako pogriješiti != nula {
povratak
}
}

funkzdravo(pisac http. ResponseWriter, zahtjev *http. Zahtjev) {
odgovor := Info {
Poruka: "Uspjeh",
Opis: "Uspješno ste pisali klijentu",
}

pogreška := json. NewEncoder (pisac).Encode (odgovor)

ako pogriješiti != nula {
log. Fataln (greška)
}
}

The zdravo funkcija rukovatelja je funkcija rukovatelja za DOBITI zahtjev.

u glavni funkcija, ruter varijabla je instanca Chi rutera. Možete navesti metodu zahtjeva s nazivom metode; u ovom slučaju, Dobiti uzima rutu i identifikator funkcije rukovatelja kao parametre.

3. Paket HttpRouter

The HttpRouter paket je vrlo učinkovit, lagani multiplekser zahtjeva. Pruža više funkcionalnosti od ServeMux implementacija http paketa.

Paket HttpRouter ima mali memorijski otisak, visoke performanse i dobru skalabilnost. To je jedan od najstarijih i najčešće korištenih usmjerivača u Go ekosustavu, implementiran u mnogima popularni Go okviri, uključujući knjižnica Gin.

Pokretanje ove naredbe na terminalu vašeg radnog direktorija instalirat će paket HttpRouter.

ići dobiti github.com/julienschmidt/httprouter

Usmjeravanje pomoću HttpRoutera malo se razlikuje od usmjerivača Chi i Gorilla Mux.

Evo kako možete postaviti jednostavan GET zahtjev s paketom HttpRouter.

uvoz (
"kodiranje/json"
"github.com/julienschmidt/httprouter"
"log"
"net/http"
)

funkglavni() {
usmjerivač := httpusmjerivač. Novi()
ruter. GET("/zdravo", zdravo)
pogriješiti := http. ListenAndServe(":8000", usmjerivač)

ako pogriješiti != nula {
povratak
}
}

funkzdravo(pisac http. ResponseWriter, zahtjev *http. Zahtjev, _ httprouter. parametri) {
odgovor := Info {
Poruka: "Uspjeh",
Opis: "Uspješno ste pogodili API krajnju točku",
}

pogreška := json. NewEncoder (pisac).Encode (odgovor)

ako pogriješiti != nula {
log. Fataln (greška)
}
}

Funkcije rukovatelja za paket HttpRouter moraju imati Parametri metoda HTTP usmjerivača.

The ruter varijabla je instanca HttpRoutera. Možete postaviti GET zahtjev s DOBITI metoda koja uzima rutu i identifikator funkcije rukovatelja.

4. Pat Router

Pogladiti je multiplekser HTTP zahtjeva u stilu Sinatre koji radi s Goovim net/http paketom. Pat usmjerivač nema nikakve funkcije osim usmjeravanja.

Pokrenite ovu naredbu u svom radnom direktoriju da instalirate Pat Router

ići dobiti github.com/bmizerany/pat

Pat usmjerivač implementira slične funkcije kao i ServeMux metoda.

Evo kako možete upravljati usmjeravanjem zahtjeva pomoću pogladiti paket.

uvoz (
"kodiranje/json"
"github.com/bmizerany/pat"
"log"
"net/http"
)

funkzdravo(pisac http. ResponseWriter, zahtjev *http. Zahtjev) {
odgovor := Info {
Poruka: "Uspjeh",
Opis: "Uspješno ste dosegli krajnju točku",
}

pogreška := json. NewEncoder (pisac).Encode (odgovor)

ako pogriješiti != nula {
log. Fatalln("pogreška")
}
}

funkglavni() {
ruter := pat. Novi() // instanca usmjerivača
ruter. Get("/zdravo", http. HandlerFunc (pozdrav))
http. Ručka ("/", usmjerivač)
pogriješiti := http. ListenAndServe(":12345", nula)

ako pogriješiti != nula {
log. Fatal("ListenAndServe: ", err)
}
}

The Novi metoda vraća instancu usmjerivača. Morat ćete omotati funkciju rukovatelja s HandlerFunc metoda. Zatim možete koristiti Ručka metoda za određivanje korijenske staze i montiranje instance usmjerivača prije pokretanja poslužitelja.

Izrada usmjerivača nije tako teška

Svi usmjerivači u ovom članku implementiraju funkcionalnost iz net i http paketa. Možete provjeriti dokumentaciju metode ServeMux da biste saznali kako replicirati usmjerivač s dodatnom funkcionalnošću koja odgovara vašim potrebama.

Okviri kao što su Gin i Fiber uključuju funkcionalnost usmjeravanja iz mrežnog paketa ili vanjskih paketa koji to implementiraju.