Web-Routing ist eine Technik zum Zuweisen von HTTP-Anforderungen zu Handler-Funktionen, die auf dem angegebenen URL-Pfad ausgeführt werden. Routing wird häufig verwendet, um Single-Page-Anwendungen (SPAs) und APIs zu erstellen. Im Router definiert der Code die Abfolge von Aktionen, die mit der Anfrage eines Benutzers einhergehen.

Die Go-Standardbibliothek verfügt über die meisten Funktionen, die Sie zum Erstellen von Webanwendungen benötigen, einschließlich Routing. Du kannst den... benutzen ServeMux tippe die ein net/http Paket für grundlegendes Routenhandling. Wenn Sie ein komplexeres Routing-Handling benötigen, stehen zahlreiche Routing-Pakete zur Auswahl.

Erste Schritte mit Routing in Go

Das Ökosystem von Go beherbergt Routing-Pakete, die das Unnötige abstrahieren und das Erstellen von Webanwendungen und -diensten erleichtern.

Viele Go-Web-Frameworks implementieren einige dieser Routing-Pakete.

Hier ist ein einfaches Strukturmodell für die JSON Antwort, die Sie in diesem Tutorial an den Client zurückgeben.

instagram viewer
Typ Die Info Struktur {
Nachricht Schnur`json:"Nachricht"`
Beschreibung Schnur`json:"Beschreibung"`
}

Die meisten Go-Router verwenden immer noch das Netz/http ResponseWriter und Anfrage Methoden als Parameter in Handler-Funktionen.

Funkhallo(Autor http. ResponseWriter, Anfrage *http. Anfrage) {
// Geschäftslogik der Handler-Funktion hier
}

Außerdem müssen Sie einen Server mit dem starten ListenAndServe Methode zum Starten des Servers in den meisten Paketen.

Fehler := http. ListenAndServe(":8000", Router)

wenn äh != Null {
Rückkehr
}

Hier sind einige der beliebtesten Routing-Pakete im Go-Ökosystem.

1. Der Gorilla-Mux-Router

Das Gorilla Mux-Paket implementiert sowohl einen Request-Router als auch einen Request-Dispatcher für HTTP-Anfragen. Es ist wie die http. ServeMux Methode, aber mit zusätzlicher Funktionalität.

Der Gorilla Mux-Router implementiert die http. Handler -Schnittstelle und ihre Methoden sind mit der kompatibel ServeMux Methode. Das Paket implementiert auch mehrere URL-Schemata und Sie können Router als Sub-Router (verschachtelte Routen) verwenden, um ähnliche Routen zu definieren.

Das Gorilla Mux -Paket ist Teil des Gorilla-Web-Toolkits. Das Toolkit enthält webbezogene Pakete, mit denen viele Probleme gelöst werden können Benutzer mit Sitzungen angemeldet halten zur Datenspeicherung mittels Cookies.

Führen Sie diesen Befehl im Terminal Ihres Arbeitsbereichs aus, um das Gorilla Mux-Paket zu installieren.

gehen Holen Sie sich -u github.com/gorilla/mux

So können Sie eine einrichten ERHALTEN Anfrageroute zu einer Handler-Funktion, die mit dem Gorilla Mux-Paket in eine JSON-Antwort kodiert.

importieren (
"Codierung/json"
"github.com/gorilla/mux"
"Protokoll"
"net/http"
)

Funkhallo(Autor http. ResponseWriter, Anfrage *http. Anfrage) {
Antwort := Info {
Meldung: "Erfolg",
Beschreibung: "Sie haben erfolgreich an den Client geschrieben",
}

Fehler := json. NewEncoder (Schreiber).Encode (Antwort)

wenn äh != Null {
Protokoll. Fatalln (äh)
}
}

Funkhauptsächlich() {
router := mux. NeuerRouter()
Router. HandleFunc("/hallo", hallo).Methods("GET")
Fehler := http. ListenAndServe(":8000", Router)

wenn äh != Null {
Rückkehr
}
}

Das hallo Handler-Funktion codiert die Struktur mithilfe von JSON in JSON Kodieren Methode der NeuerEncoder Struktur.

Das hauptsächlich -Funktion weist dem eine neue Gorilla Mux-Routerinstanz zu Router Variable. Es ruft dann die HandleFunc -Methode, um die Route der Handler-Funktion zuzuordnen. Du kannst den... benutzen Methoden -Methode, um einen Anforderungstyp anzugeben.

2. Der Chi-Router

Das Chi-Router ist ein leichter, schneller, zusammensetzbarer Router zum Erstellen von HTTP-basierten Webdiensten in Go. Der Chi-Router ist mit dem kompatibel http Paket, und es gibt keine externen Abhängigkeiten für den Router.

Im Gegensatz zu vielen Routern bietet Chi Kontextkontrolle mit dem Kontext Paket für die zeitnahe Bearbeitung von Anfragen.

Installieren Sie den Chi-Router mit diesem Befehl auf Ihren Go-Modulen.

gehen Holen Sie sich github.com/gehen-chi/chi

Das Routing mit dem Gorilla Mux-Router und dem Chi-Router ist sehr ähnlich. So können Sie ein ähnliches einrichten ERHALTEN Anfrage, die struct als Antwort in JSON kodiert.

importieren (
"Codierung/json"
"github.com/gehen-chi/chi/v5"
"Protokoll"
"net/http"
)

Funkhauptsächlich() {
Router := chi. NeuerRouter()
Router. Holen("/hallo", hallo)
Fehler := http. ListenAndServe(":8000", Router)

wenn äh != Null {
Rückkehr
}
}

Funkhallo(Autor http. ResponseWriter, Anfrage *http. Anfrage) {
Antwort := Info {
Meldung: "Erfolg",
Beschreibung: "Sie haben erfolgreich an den Client geschrieben",
}

Fehler := json. NewEncoder (Schreiber).Encode (Antwort)

wenn äh != Null {
Protokoll. Fatalln (äh)
}
}

Das hallo Handler-Funktion ist die Handler-Funktion für die ERHALTEN Anfrage.

In dem hauptsächlich Funktion, die Router Variable ist eine Chi-Router-Instanz. Sie können eine Anforderungsmethode mit dem Methodennamen angeben; in diesem Fall, Erhalten nimmt die Route und die Kennung der Handler-Funktion als Parameter entgegen.

3. Das HttpRouter-Paket

Das HTTPRouter Paket ist ein hochleistungsfähiger, leichtgewichtiger Anforderungsmultiplexer. Es bietet mehr Funktionalität als die ServeMux Implementierung des http-Pakets.

Das HttpRouter-Paket hat einen geringen Speicherbedarf, hohe Leistung und gute Skalierbarkeit. Es ist einer der ältesten und am häufigsten verwendeten Router im Go-Ökosystem, der in vielen implementiert ist beliebte Go-Frameworks, einschließlich die Gin-Bibliothek.

Wenn Sie diesen Befehl auf dem Terminal Ihres Arbeitsverzeichnisses ausführen, wird das HttpRouter-Paket installiert.

gehen Holen Sie sich github.com/julienschmidt/httprouter

Das Routing mit dem HttpRouter unterscheidet sich geringfügig von den Routern Chi und Gorilla Mux.

So können Sie mit dem HttpRouter-Paket eine einfache GET-Anforderung einrichten.

importieren (
"Codierung/json"
"github.com/julienschmidt/httprouter"
"Protokoll"
"net/http"
)

Funkhauptsächlich() {
router := httprouter. Neu()
Router. GET("/hallo", hallo)
Fehler := http. ListenAndServe(":8000", Router)

wenn äh != Null {
Rückkehr
}
}

Funkhallo(Autor http. ResponseWriter, Anfrage *http. Anfrage, _ httprouter. Parameter) {
Antwort := Info {
Meldung: "Erfolg",
Beschreibung: "Sie haben den API-Endpunkt erfolgreich erreicht",
}

Fehler := json. NewEncoder (Schreiber).Encode (Antwort)

wenn äh != Null {
Protokoll. Fatalln (äh)
}
}

Handler-Funktionen für das HttpRouter-Paket müssen die haben Parameter Methode des HTTP-Routers.

Das Router Variable ist eine Instanz von HttpRouter. Sie können eine GET-Anfrage mit dem einrichten ERHALTEN -Methode, die die Route und den Bezeichner der Handler-Funktion übernimmt.

4. Der Pat-Router

Klopfen ist ein HTTP-Request-Multiplexer im Sinatra-Stil, der mit dem net/http-Paket von Go funktioniert. Der Pat-Router hat keine anderen Funktionen als Routing.

Führen Sie diesen Befehl in Ihrem Arbeitsverzeichnis aus, um den Pat Router zu installieren

gehen Holen Sie sich github.com/bmizerany/pat

Der Pat-Router implementiert ähnliche Funktionalitäten wie der ServeMux Methode.

So können Sie mit dem Request-Routing umgehen klopfen Paket.

importieren (
"Codierung/json"
"github.com/bmizerany/pat"
"Protokoll"
"net/http"
)

Funkhallo(Autor http. ResponseWriter, Anfrage *http. Anfrage) {
Antwort := Info {
Meldung: "Erfolg",
Beschreibung: "Sie haben den Endpunkt erfolgreich erreicht",
}

Fehler := json. NewEncoder (Schreiber).Encode (Antwort)

wenn äh != Null {
Protokoll. Fatalln("err")
}
}

Funkhauptsächlich() {
Router := pat. Neu() // Routerinstanz
Router. Hole("/hallo", http. HandlerFunc (Hallo))
http. Handle("/", Router)
Fehler := http. ListenAndServe(":12345", Null)

wenn äh != Null {
Protokoll. Fatal("ListenAndServe: ", äh)
}
}

Das Neu -Methode gibt eine Router-Instanz zurück. Sie müssen die Handler-Funktion mit umschließen HandlerFunc Methode. Sie können dann die verwenden Handhaben -Methode, um einen Root-Pfad anzugeben und die Router-Instanz zu mounten, bevor ein Server gestartet wird.

Einen Router zu bauen ist nicht so schwierig

Alle Router in diesem Artikel implementieren Funktionen aus den net- und http-Paketen. Sie können die Dokumentation der ServeMux-Methode lesen, um zu erfahren, wie Sie einen Router mit zusätzlichen Funktionen für Ihre Anforderungen replizieren.

Frameworks wie Gin und Fiber enthalten Routing-Funktionalität aus dem net-Paket oder externen Paketen, die diese implementieren.