Routing sieci Web to technika przypisywania żądań HTTP do funkcji obsługi, które działają na określonej ścieżce adresu URL. Routing jest często używany do tworzenia aplikacji jednostronicowych (SPA) i interfejsów API. W routerze kod definiuje sekwencję działań towarzyszących żądaniu użytkownika.

Biblioteka standardowa Go zawiera większość funkcji potrzebnych do tworzenia aplikacji internetowych, w tym routing. Możesz użyć SerwujMux wpisz w sieć/http pakiet do podstawowej obsługi tras. Jeśli potrzebujesz bardziej złożonej obsługi tras, możesz wybierać spośród wielu pakietów routingu.

Pierwsze kroki z routingiem w Go

Ekosystem Go zawiera pakiety routingu, które abstrahują niepotrzebne i ułatwiają tworzenie aplikacji i usług internetowych.

Wiele platform internetowych Go implementuje niektóre z tych pakietów routingu.

Oto prosty model struktury dla JSON odpowiedź wrócisz do klienta w tym samouczku.

rodzaj Informacje struktura {
Wiadomość strunowy`json:"wiadomość"`
Opis strunowy`json:"opis"`
}

Większość routerów Go nadal korzysta z sieci/http

Autor odpowiedzi oraz Żądanie metody jako parametry w funkcjach obsługi.

funkcjonowaćWitam(pisarz http. ResponseWriter, żądanie *http. Żądanie) {
// tutaj logika biznesowa funkcji obsługi
}

Ponadto musisz uruchomić serwer z Słuchaj i podawaj metoda uruchamiania serwera w większości pakietów.

błąd := http. SłuchajIObsługuj(:8000", router)

jeśli błąd != zero {
zwrócić
}

Oto niektóre z popularnych pakietów routingu w ekosystemie Go.

1. Router Gorilla Mux

Pakiet Gorilla Mux implementuje zarówno router żądań, jak i dyspozytor żądań dla żądań HTTP. To jest jak http. SerwujMux metoda, ale z dodatkową funkcjonalnością.

Router Gorilla Mux implementuje http. Treser interfejs i jego metody są kompatybilne z SerwujMux metoda. Pakiet implementuje również wiele schematów URL i możesz używać routerów jako podrouterów (trasy zagnieżdżone) do definiowania podobnych tras.

The Goryl Mux pakiet jest częścią zestawu narzędzi internetowych Gorilla. Zestaw narzędzi zawiera pakiety internetowe, które rozwiązują wiele problemów z utrzymywanie użytkowników zalogowanych w sesjach do przechowywania danych za pomocą plików Cookies.

Uruchom to polecenie w terminalu swojego obszaru roboczego, aby zainstalować pakiet Gorilla Mux.

iść pobierz -u github.com/gorilla/mux

Oto, jak możesz skonfigurować DOSTAWAĆ żądać trasy do funkcji obsługi, która koduje odpowiedź JSON z pakietem Gorilla Mux.

import (
"kodowanie/json"
„github.com/gorilla/mux”
"dziennik"
„sieć/http”
)

funkcjonowaćWitam(pisarz http. ResponseWriter, żądanie *http. Żądanie) {
odpowiedź := Informacje {
Wiadomość: „Sukces”,
Opis: "Udało Ci się pisać do klienta",
}

błąd := json. NewEncoder (writer).Encode (odpowiedź)

jeśli błąd != zero {
dziennik. Śmiertelny (błąd)
}
}

funkcjonowaćGłówny() {
router := multipleks. Nowy router()
router. HandleFunc("/hello", hello).Methods("GET")
błąd := http. SłuchajIObsługuj(:8000", router)

jeśli błąd != zero {
zwrócić
}
}

The Witam funkcja obsługi koduje strukturę do formatu JSON przy użyciu Kodować metoda NowyKoder struktura.

The Główny funkcja przypisuje nową instancję routera Gorilla Mux do router zmienny. Następnie nazywa HandleFunc metoda mapowania trasy do funkcji obsługi. Możesz użyć Metody metodę, aby określić typ żądania.

2. Router Chi

The Chi Router to lekki, szybki, komponowalny router do tworzenia usług internetowych opartych na HTTP w Go. Router Chi jest kompatybilny z http pakiet i nie ma zewnętrznych zależności dla routera.

W przeciwieństwie do wielu routerów Chi zapewnia kontrolę kontekstu za pomocą kontekst pakiet do terminowej obsługi wniosków.

Zainstaluj router Chi na swoich modułach Go za pomocą tego polecenia.

iść pobierz github.com/iść-chi/chi

Routing z routerem Gorilla Mux i routerem Chi jest bardzo podobny. Oto, jak możesz skonfigurować podobne DOSTAWAĆ żądanie, które koduje struct do JSON jako odpowiedź.

import (
"kodowanie/json"
"github.com/iść-chi/chi/v5"
"dziennik"
„sieć/http”
)

funkcjonowaćGłówny() {
router := chi. Nowy router()
router. Pobierz("/witaj", witaj)
błąd := http. SłuchajIObsługuj(:8000", router)

jeśli błąd != zero {
zwrócić
}
}

funkcjonowaćWitam(pisarz http. ResponseWriter, żądanie *http. Żądanie) {
odpowiedź := Informacje {
Wiadomość: „Sukces”,
Opis: "Udało Ci się pisać do klienta",
}

błąd := json. NewEncoder (writer).Encode (odpowiedź)

jeśli błąd != zero {
dziennik. Śmiertelny (błąd)
}
}

The Witam funkcja obsługi jest funkcją obsługi dla DOSTAWAĆ żądanie.

w Główny funkcja, router zmienna jest instancją routera Chi. Możesz określić metodę żądania za pomocą nazwy metody; w tym przypadku, Dostać przyjmuje jako parametry identyfikator trasy i funkcji obsługi.

3. Pakiet HttpRouter

The HttpRouter Package to wysoce wydajny, lekki multiplekser żądań. Zapewnia większą funkcjonalność niż SerwujMux implementacja pakietu http.

Pakiet HttpRouter ma niewielki rozmiar pamięci, wysoką wydajność i dobrą skalowalność. To jeden z najstarszych i najczęściej używanych routerów w ekosystemie Go, zaimplementowany w wielu popularne frameworki Go, włącznie z biblioteka Gin.

Uruchomienie tego polecenia na terminalu katalogu roboczego spowoduje zainstalowanie pakietu HttpRouter.

iść pobierz github.com/julienschmidt/httprouter

Routing za pomocą HttpRouter różni się nieco od routerów Chi i Gorilla Mux.

Oto, jak skonfigurować proste żądanie GET za pomocą pakietu HttpRouter.

import (
"kodowanie/json"
„github.com/julienschmidt/httprouter”
"dziennik"
„sieć/http”
)

funkcjonowaćGłówny() {
router := httprouter. Nowy()
router. POBIERZ("/witaj", witaj)
błąd := http. SłuchajIObsługuj(:8000", router)

jeśli błąd != zero {
zwrócić
}
}

funkcjonowaćWitam(pisarz http. ResponseWriter, żądanie *http. Żądanie, _ httprouter. parametry) {
odpowiedź := Informacje {
Wiadomość: „Sukces”,
Opis: "Udało Ci się trafić do punktu końcowego API",
}

błąd := json. NewEncoder (writer).Encode (odpowiedź)

jeśli błąd != zero {
dziennik. Śmiertelny (błąd)
}
}

Funkcje obsługi dla pakietu HttpRouter muszą mieć Params metoda routera HTTP.

The router zmienna jest instancją HttpRouter. Możesz skonfigurować żądanie GET za pomocą DOSTAWAĆ metoda, która pobiera trasę i identyfikator funkcji obsługi.

4. Router Pat

Poklepać jest multiplekserem HTTP w stylu Sinatry, który współpracuje z pakietem net/http Go. Router Pat nie ma żadnych innych funkcji poza routingiem.

Uruchom to polecenie w swoim katalogu roboczym, aby zainstalować Pat Router

iść pobierz github.com/bmizerany/pat

Router Pat implementuje podobne funkcje do SerwujMux metoda.

Oto, jak obsługiwać routing żądań za pomocą poklepać pakiet.

import (
"kodowanie/json"
„github.com/bmizerany/pat”
"dziennik"
„sieć/http”
)

funkcjonowaćWitam(pisarz http. ResponseWriter, żądanie *http. Żądanie) {
odpowiedź := Informacje {
Wiadomość: „Sukces”,
Opis: "Udało Ci się trafić do punktu końcowego",
}

błąd := json. NewEncoder (writer).Encode (odpowiedź)

jeśli błąd != zero {
dziennik. Fatalln("błąd")
}
}

funkcjonowaćGłówny() {
router := wz. Nowy() // instancja routera
router. Pobierz("/cześć", http. HandlerFunc (cześć))
http. Uchwyt("/", router)
błąd := http. SłuchajIObsługuj(:12345", zero)

jeśli błąd != zero {
dziennik. Fatal("ListenAndServe: ", err)
}
}

The Nowy Metoda zwraca instancję routera. Będziesz musiał owinąć funkcję obsługi za pomocą Funkcja obsługi metoda. Następnie możesz użyć Uchwyt metodę, aby określić ścieżkę główną i zamontować instancję routera przed uruchomieniem serwera.

Budowa routera nie jest taka trudna

Wszystkie routery opisane w tym artykule implementują funkcje z pakietów net i http. Możesz zapoznać się z dokumentacją metody ServeMux, aby dowiedzieć się, jak zreplikować router z dodatkową funkcjonalnością do własnych potrzeb.

Struktury, takie jak Gin i Fiber, zawierają funkcjonalność routingu z pakietu sieciowego lub pakietów zewnętrznych, które ją implementują.