Webové smerovanie je technika priraďovania požiadaviek HTTP k funkciám obsluhy, ktoré fungujú na zadanej ceste URL. Smerovanie sa často používa na vytváranie jednostránkových aplikácií (SPA) a API. V smerovači kód definuje postupnosť akcií sprevádzajúcich požiadavku používateľa.

Štandardná knižnica Go obsahuje väčšinu funkcií, ktoré budete potrebovať na vytváranie webových aplikácií, vrátane smerovania. Môžete použiť ServeMux zadajte net/http balík pre základnú manipuláciu s trasou. Ak potrebujete zložitejšie spracovanie trasy, máte na výber množstvo balíkov smerovania.

Začíname so smerovaním v aplikácii Go

Ekosystém Go je domovom smerovacích balíkov, ktoré abstrahujú nepotrebné a uľahčujú vytváranie webových aplikácií a služieb.

Mnohé webové rámce Go implementujú niektoré z týchto smerovacích balíkov.

Tu je jednoduchý štruktúrny model pre JSON odpoveď, ktorú vrátite klientovi v tomto návode.

typu Info štrukturovať {
Správa reťazec`json:"správa"`
Popis reťazec`json:"popis"`
}

Väčšina smerovačov Go stále používa sieť net/http

instagram viewer
ResponseWriter a Žiadosť metódy ako parametre vo funkciách obsluhy.

funcAhoj(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
// tu je obchodná logika funkcie obsluhy
}

Tiež budete musieť spustiť server s Počúvajte a podávajte metóda na spustenie servera vo väčšine balíkov.

chyba := http. Počúvaj a podávaj(":8000", router)

ak chyba!= nula {
vrátiť
}

Tu sú niektoré z populárnych smerovacích balíkov v ekosystéme Go.

1. Gorilla Mux Router

Balík Gorilla Mux implementuje smerovač požiadaviek aj dispečer požiadaviek pre požiadavky HTTP. Je to ako http. ServeMux metóda, ale s pridanou funkcionalitou.

Router Gorilla Mux implementuje http. Handler rozhranie a jeho metódy sú kompatibilné s ServeMux metóda. Balík tiež implementuje viaceré schémy URL a môžete použiť smerovače ako podsmerovače (vnorené cesty) na definovanie podobných ciest.

The Gorila Mux balík je súčasťou sady nástrojov Gorilla web. Sada nástrojov obsahuje balíčky súvisiace s webom na riešenie mnohých problémov udržiavanie používateľov prihlásených pomocou relácií na ukladanie údajov pomocou súborov cookie.

Spustite tento príkaz v termináli vášho pracovného priestoru a nainštalujte balík Gorilla Mux.

ísť get -u github.com/gorilla/mux

Tu je návod, ako môžete nastaviť a GET vyžiadanie smerovania k funkcii obsluhy, ktorá sa zakóduje do odpovede JSON s balíkom Gorilla Mux.

importovať (
"kódovanie/json"
"github.com/gorilla/mux"
"log"
"net/http"
)

funcAhoj(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
odpoveď := Info {
Správa: "Úspech",
Popis: "Úspešne ste napísali klientovi",
}

chyba := json. NewEncoder (zapisovač).Encode (odpoveď)

ak chyba!= nula {
log. Fatalln (chyba)
}
}

funchlavné() {
router := mux. NewRouter()
router. HandleFunc("/ahoj", ahoj).Methods("GET")
chyba := http. Počúvaj a podávaj(":8000", router)

ak chyba!= nula {
vrátiť
}
}

The Ahoj funkcia handler zakóduje štruktúru do JSON pomocou Zakódovať metóda NewEncoder štrukturovať.

The hlavné funkcia priradí novú inštanciu smerovača Gorilla Mux k router premenlivý. Potom zavolá HandleFunc metóda na mapovanie trasy k funkcii handlera. Môžete použiť Metódy spôsob určenia typu požiadavky.

2. Smerovač Chi

The Chi Router je ľahký, rýchly, skladateľný smerovač na vytváranie webových služieb založených na HTTP v Go. Router Chi je kompatibilný s http balík a neexistujú žiadne externé závislosti pre smerovač.

Na rozdiel od mnohých smerovačov Chi poskytuje kontextové ovládanie s kontext balík na včasné vybavenie požiadavky.

Pomocou tohto príkazu nainštalujte smerovač Chi do svojich modulov Go.

ísť získať github.com/ísť-chi/chi

Smerovanie s routerom Gorilla Mux a routerom Chi je veľmi podobné. Tu je návod, ako si môžete nastaviť podobný GET žiadosť, ktorá zakóduje štruktúru do JSON ako odpoveď.

importovať (
"kódovanie/json"
"github.com/ísť-chi/chi/v5"
"log"
"net/http"
)

funchlavné() {
router := chi. NewRouter()
router. Get("/ahoj", ahoj)
chyba := http. Počúvaj a podávaj(":8000", router)

ak chyba!= nula {
vrátiť
}
}

funcAhoj(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
odpoveď := Info {
Správa: "Úspech",
Popis: "Úspešne ste napísali klientovi",
}

chyba := json. NewEncoder (zapisovač).Encode (odpoveď)

ak chyba!= nula {
log. Fatalln (chyba)
}
}

The Ahoj handler function je obslužná funkcia pre GET žiadosť.

V hlavné funkcia, router premenná je inštancia smerovača Chi. Môžete zadať metódu požiadavky s názvom metódy; v tomto prípade, Získajte berie ako parametre identifikátor funkcie cesty a obsluhy.

3. Balík HttpRouter

The HttpRouter balík je vysoko výkonný, ľahký multiplexor požiadaviek. Poskytuje viac funkcií ako ServeMux implementácia balíka http.

Balík HttpRouter má malé nároky na pamäť, vysoký výkon a dobrú škálovateľnosť. Je to jeden z najstarších a najpoužívanejších smerovačov v ekosystéme Go, implementovaný v mnohých populárne rámce Go, počítajúc do toho knižnica Gin.

Spustenie tohto príkazu na termináli vášho pracovného adresára nainštaluje balík HttpRouter.

ísť získajte github.com/julienschmidt/httprouter

Smerovanie pomocou smerovača HttpRouter sa mierne líši od smerovačov Chi a Gorilla Mux.

Tu je návod, ako môžete nastaviť jednoduchú požiadavku GET s balíkom HttpRouter.

importovať (
"kódovanie/json"
"github.com/julienschmidt/httprouter"
"log"
"net/http"
)

funchlavné() {
router := httprouter. Nový()
router. GET("/ahoj", ahoj)
chyba := http. Počúvaj a podávaj(":8000", router)

ak chyba!= nula {
vrátiť
}
}

funcAhoj(spisovateľ http. ResponseWriter, vyžiadajte *http. Žiadosť, _ httprouter. parametre) {
odpoveď := Info {
Správa: "Úspech",
Popis: "Úspešne ste dosiahli koncový bod API",
}

chyba := json. NewEncoder (zapisovač).Encode (odpoveď)

ak chyba!= nula {
log. Fatalln (chyba)
}
}

Funkcie obsluhy pre balík HttpRouter musia mať príponu Params metóda smerovača HTTP.

The router premenná je inštanciou HttpRouter. Požiadavku GET môžete nastaviť pomocou GET metóda, ktorá preberá smerovanie a identifikátor funkcie obsluhy.

4. Smerovač Pat

Pat je multiplexer požiadaviek HTTP v štýle Sinatra, ktorý pracuje s balíkom Go net/http. Router Pat nemá žiadne iné funkcie ako smerovanie.

Spustite tento príkaz vo svojom pracovnom adresári a nainštalujte smerovač Pat

ísť získaj github.com/bmizerany/pat

Router Pat implementuje podobné funkcie ako ServeMux metóda.

Tu je návod, ako môžete spracovať smerovanie požiadaviek pomocou pat balík.

importovať (
"kódovanie/json"
"github.com/bmizerany/pat"
"log"
"net/http"
)

funcAhoj(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
odpoveď := Info {
Správa: "Úspech",
Popis: "Úspešne ste dosiahli koncový bod",
}

chyba := json. NewEncoder (zapisovač).Encode (odpoveď)

ak chyba!= nula {
log. Fatalln("chyba")
}
}

funchlavné() {
router := pat. Nový() // inštancia smerovača
router. Získajte("/ahoj", http. HandlerFunc (ahoj))
http. Rukoväť ("/", smerovač)
chyba := http. Počúvaj a podávaj(":12345", nula)

ak chyba!= nula {
log. Fatal("ListenAndServe: ", chyba)
}
}

The Nový metóda vráti inštanciu smerovača. Funkciu obsluhy budete musieť zabaliť do HandlerFunc metóda. Potom môžete použiť Rukoväť na určenie koreňovej cesty a pripojenie inštancie smerovača pred spustením servera.

Zostavenie smerovača nie je také ťažké

Všetky smerovače v tomto článku implementujú funkcie z balíkov net a http. Môžete si pozrieť dokumentáciu metódy ServeMux, aby ste sa naučili, ako replikovať smerovač s dodatočnými funkciami, aby vyhovoval vašim potrebám.

Rámce ako Gin a Fiber obsahujú funkcie smerovania zo sieťového balíka alebo externých balíkov, ktoré ju implementujú.