Spletno usmerjanje je tehnika dodeljevanja zahtev HTTP funkcijam za obravnavo, ki delujejo na navedeni poti URL. Usmerjanje se pogosto uporablja za izdelavo enostranskih aplikacij (SPA) in API-jev. V usmerjevalniku koda določa zaporedje dejanj, ki spremljajo uporabnikovo zahtevo.

Standardna knjižnica Go ima večino funkcij, ki jih boste potrebovali za izdelavo spletnih aplikacij, vključno z usmerjanjem. Lahko uporabite ServeMux vnesite net/http paket za osnovno upravljanje poti. Če potrebujete bolj zapleteno upravljanje poti, lahko izbirate med številnimi paketi usmerjanja.

Kako začeti z usmerjanjem v Go

Gojev ekosistem je dom usmerjevalnih paketov, ki abstrahirajo nepotrebno in olajšajo izdelavo spletnih aplikacij in storitev.

Številni spletni okviri Go izvajajo nekatere od teh usmerjevalnih paketov.

Tukaj je preprost strukturni model za JSON odgovor, ki ga boste vrnili stranki v tej vadnici.

vrsta Informacije struct {
Sporočilo vrvica`json:"sporočilo"`
Opis vrvica`json:"opis"`
}

Večina usmerjevalnikov Go še vedno uporablja net/http

instagram viewer
ResponseWriter in Prošnja metode kot parametri v funkcijah obdelovalca.

funkzdravo(pisatelj http. ResponseWriter, zahtevajte *http. Prošnja) {
// poslovna logika funkcije upravljalnika tukaj
}

Prav tako boste morali zagnati strežnik z ListenAndServe način za zagon strežnika v večini paketov.

napaka := http. ListenAndServe(":8000", usmerjevalnik)

če napaka!= nič {
vrnitev
}

Tukaj je nekaj priljubljenih paketov usmerjanja v ekosistemu Go.

1. Usmerjevalnik Gorilla Mux

Paket Gorilla Mux implementira usmerjevalnik zahtev in dispečer zahtev za zahteve HTTP. To je kot http. ServeMux način, vendar z dodano funkcionalnostjo.

Usmerjevalnik Gorilla Mux izvaja http. Voditelj vmesnik in njegove metode so združljive z ServeMux metoda. Paket izvaja tudi več shem URL-jev in lahko uporabite usmerjevalnike kot podusmerjevalnike (ugnezdene poti) za definiranje podobnih poti.

The Gorilla Mux paket je del kompleta spletnih orodij Gorilla. Komplet orodij vključuje pakete, povezane s spletom, za reševanje številnih težav ohranjanje prijavljenih uporabnikov s Sessions za shranjevanje podatkov s pomočjo piškotkov.

Zaženite ta ukaz v terminalu svojega delovnega prostora, da namestite paket Gorilla Mux.

pojdi get -u github.com/gorilla/mux

Tukaj je opisano, kako lahko nastavite a DOBITI pot zahteve do funkcije obdelovalca, ki kodira v odgovor JSON s paketom Gorilla Mux.

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

funkzdravo(pisatelj http. ResponseWriter, zahtevajte *http. Prošnja) {
odgovor := Informacije {
Sporočilo: "Uspeh",
Opis: "Uspešno ste pisali stranki",
}

napaka := json. NewEncoder (pisec).Encode (odgovor)

če napaka!= nič {
dnevnik. Fatalln (napaka)
}
}

funkglavni() {
usmerjevalnik := mux. NewRouter()
usmerjevalnik. HandleFunc("/hello", hello).Methods("GET")
napaka := http. ListenAndServe(":8000", usmerjevalnik)

če napaka!= nič {
vrnitev
}
}

The zdravo funkcija handler kodira strukturo v JSON z uporabo Kodiraj metoda NewEncoder struct.

The glavni funkcija dodeli nov primerek usmerjevalnika Gorilla Mux usmerjevalnik spremenljivka. Nato pokliče HandleFunc metoda za preslikavo poti v funkcijo upravljalnika. Lahko uporabite Metode metoda za določanje vrste zahteve.

2. Usmerjevalnik Chi

The Chi Router je lahek, hiter, sestavljiv usmerjevalnik za gradnjo spletnih storitev, ki temeljijo na HTTP, v Go. Usmerjevalnik Chi je združljiv z http paket in za usmerjevalnik ni zunanjih odvisnosti.

Za razliko od mnogih usmerjevalnikov Chi zagotavlja nadzor konteksta z kontekstu paket za pravočasno obravnavo zahtevka.

S tem ukazom namestite usmerjevalnik Chi na svoje module Go.

pojdi pridobi github.com/pojdi-či/či

Usmerjanje z usmerjevalnikom Gorilla Mux in usmerjevalnikom Chi je zelo podobno. Tukaj je opisano, kako lahko nastavite podobno DOBITI zahteva, ki kodira struct v JSON kot odgovor.

uvoz (
"kodiranje/json"
"github.com/pojdi-chi/chi/v5"
"dnevnik"
"net/http"
)

funkglavni() {
usmerjevalnik := chi. NewRouter()
usmerjevalnik. Get("/zdravo", zdravo)
napaka := http. ListenAndServe(":8000", usmerjevalnik)

če napaka!= nič {
vrnitev
}
}

funkzdravo(pisatelj http. ResponseWriter, zahtevajte *http. Prošnja) {
odgovor := Informacije {
Sporočilo: "Uspeh",
Opis: "Uspešno ste pisali stranki",
}

napaka := json. NewEncoder (pisec).Encode (odgovor)

če napaka!= nič {
dnevnik. Fatalln (napaka)
}
}

The zdravo funkcija obravnave je funkcija obravnave za DOBITI prošnja.

V glavni funkcija, usmerjevalnik spremenljivka je primerek usmerjevalnika Chi. Metodo zahteve lahko določite z imenom metode; v tem primeru, Dobiti prevzame identifikator funkcije poti in upravljalnika kot parametra.

3. Paket HttpRouter

The HttpRouter paket je zelo zmogljiv, lahek multiplekser zahtev. Zagotavlja več funkcionalnosti kot ServeMux izvajanje paketa http.

Paket HttpRouter ima majhen pomnilniški odtis, visoko zmogljivost in dobro razširljivost. Je eden najstarejših in najpogosteje uporabljenih usmerjevalnikov v ekosistemu Go, implementiran v mnogih priljubljena ogrodja Go, vključno z knjižnica Gin.

Če zaženete ta ukaz na terminalu vašega delovnega imenika, boste namestili paket HttpRouter.

pojdi dobite github.com/julienschmidt/httprouter

Usmerjanje s HttpRouterjem se nekoliko razlikuje od usmerjevalnikov Chi in Gorilla Mux.

Tukaj je opisano, kako lahko nastavite preprosto zahtevo GET s paketom HttpRouter.

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

funkglavni() {
usmerjevalnik := httpusmerjevalnik. novo()
usmerjevalnik. GET("/zdravo", zdravo)
napaka := http. ListenAndServe(":8000", usmerjevalnik)

če napaka!= nič {
vrnitev
}
}

funkzdravo(pisatelj http. ResponseWriter, zahtevajte *http. Zahteva, _ httprouter. Params) {
odgovor := Informacije {
Sporočilo: "Uspeh",
Opis: "Uspešno ste dosegli končno točko API-ja",
}

napaka := json. NewEncoder (pisec).Encode (odgovor)

če napaka!= nič {
dnevnik. Fatalln (napaka)
}
}

Funkcije upravljavca za paket HttpRouter morajo imeti Params način usmerjevalnika HTTP.

The usmerjevalnik spremenljivka je primerek HttpRouter. Zahtevo GET lahko nastavite z DOBITI metoda, ki prevzame pot in identifikator funkcije upravljalnika.

4. Usmerjevalnik Pat

Pat je multiplekser zahtev HTTP v stilu Sinatre, ki deluje z Gojevim paketom net/http. Usmerjevalnik Pat nima drugih funkcij razen usmerjanja.

Zaženite ta ukaz v svojem delovnem imeniku, da namestite Pat Router

pojdi pridobite github.com/bmizerany/pat

Usmerjevalnik Pat izvaja podobne funkcije kot usmerjevalnik ServeMux metoda.

Tukaj je opisano, kako lahko obravnavate usmerjanje zahtev z pat paket.

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

funkzdravo(pisatelj http. ResponseWriter, zahtevajte *http. Prošnja) {
odgovor := Informacije {
Sporočilo: "Uspeh",
Opis: "Uspešno ste dosegli končno točko",
}

napaka := json. NewEncoder (pisec).Encode (odgovor)

če napaka!= nič {
dnevnik. Fatalln("napaka")
}
}

funkglavni() {
usmerjevalnik := pat. novo() // primerek usmerjevalnika
usmerjevalnik. Get("/zdravo", http. HandlerFunc (pozdravljeni))
http. Ročaj ("/", usmerjevalnik)
napaka := http. ListenAndServe(":12345", nič)

če napaka!= nič {
dnevnik. Fatal("ListenAndServe: ", err)
}
}

The Novo metoda vrne primerek usmerjevalnika. Funkcijo upravljalnika boste morali zaviti z HandlerFunc metoda. Nato lahko uporabite Ročaj metodo za podajanje korenske poti in namestitev primerka usmerjevalnika pred zagonom strežnika.

Izdelava usmerjevalnika ni tako težka

Vsi usmerjevalniki v tem članku izvajajo funkcionalnost iz paketov net in http. Oglejte si dokumentacijo metode ServeMux, če želite izvedeti, kako posnemati usmerjevalnik z dodatnimi funkcijami, ki bodo ustrezale vašim potrebam.

Ogrodja, kot sta Gin in Fiber, vključujejo funkcijo usmerjanja iz paketa net ali zunanjih paketov, ki jo izvajajo.