Rutarea web este o tehnică de atribuire a solicitărilor HTTP funcțiilor de gestionare care operează pe calea URL specificată. Rutarea este adesea folosită pentru a construi aplicații cu o singură pagină (SPA) și API-uri. În router, codul definește secvența de acțiuni care însoțesc solicitarea unui utilizator.

Biblioteca standard Go are cea mai mare parte a funcționalității de care veți avea nevoie pentru a crea aplicații web, inclusiv rutare. Puteți folosi ServeMux tastați net/http pachet pentru gestionarea rutelor de bază. Dacă aveți nevoie de o gestionare mai complexă a rutei, există o mulțime de pachete de rutare din care să alegeți.

Noțiuni introductive cu rutarea în Go

Ecosistemul Go găzduiește pachete de rutare care abstrac ceea ce este inutil și facilitează construirea de aplicații și servicii web.

Multe cadre web Go implementează unele dintre aceste pachete de rutare.

Iată un model de structură simplu pentru JSON răspuns pe care îl veți întoarce clientului în acest tutorial.

tip Info struct {
Mesaj şir`json:"mesaj"`
Descriere şir`json:"descriere"`
}
instagram viewer

Majoritatea routerelor Go folosesc încă net/http ResponseWriter și Cerere metodele ca parametri în funcțiile handler.

funcBuna ziua(scriitor http. ResponseWriter, solicitați *http. Cerere) {
// logica de afaceri a funcției de gestionare aici
}

De asemenea, va trebui să porniți un server cu ListenAndServe metodă de a porni serverul în majoritatea pachetelor.

greșit := http. ListenAndServe(":8000", router)

dacă greș!= zero {
întoarcere
}

Iată câteva dintre pachetele de rutare populare din ecosistemul Go.

1. Routerul Gorilla Mux

Pachetul Gorilla Mux implementează atât un router de solicitare, cât și un dispecer de solicitări pentru solicitările HTTP. Este ca http. ServeMux metodă dar cu funcționalitate adăugată.

Routerul Gorilla Mux implementează http. Handler interfața și metodele sale sunt compatibile cu ServeMux metodă. Pachetul implementează, de asemenea, mai multe scheme de adrese URL și puteți utiliza routere ca sub-rutere (rute imbricate) pentru a defini rute similare.

The Gorilla Mux pachetul face parte din setul de instrumente web Gorilla. Setul de instrumente include pachete legate de web pentru a rezolva multe probleme menținerea utilizatorilor conectați cu Sessions la stocarea datelor folosind cookie-uri.

Rulați această comandă în terminalul spațiului de lucru pentru a instala pachetul Gorilla Mux.

merge obține -u github.com/gorilla/mux

Iată cum puteți configura un OBȚINE ruta de solicitare către o funcție de gestionare care codifică un răspuns JSON cu pachetul Gorilla Mux.

import (
"encoding/json"
„github.com/gorilla/mux”
"Buturuga"
"net/http"
)

funcBuna ziua(scriitor http. ResponseWriter, solicitați *http. Cerere) {
răspuns:= Informații {
Mesaj: „Succes”,
Descriere: „Ați scris cu succes clientului”,
}

err := json. NewEncoder (scriitor).Codificare (răspuns)

dacă greș!= zero {
Buturuga. Fatalln (eră)
}
}

funcprincipal() {
router := mux. NewRouter()
router. HandleFunc("/salut", salut).Metode("GET")
greșit := http. ListenAndServe(":8000", router)

dacă greș!= zero {
întoarcere
}
}

The Buna ziua funcția de gestionare codifică structura în JSON folosind Codifica metoda de NewEncoder struct.

The principal funcția atribuie o nouă instanță de router Gorilla Mux la router variabil. Apoi cheamă HandleFunc metodă de a mapa traseul către funcția de gestionare. Puteți folosi Metode metoda de a specifica un tip de cerere.

2. Routerul Chi

The Chi Router este un router ușor, rapid și componabil pentru construirea de servicii web bazate pe HTTP în Go. Routerul Chi este compatibil cu http pachet și nu există dependențe externe pentru router.

Spre deosebire de multe routere, Chi oferă control de context cu context pachet pentru tratarea în timp util a cererilor.

Instalați routerul Chi pe modulele dvs. Go cu această comandă.

merge obține github.com/merge-chi/chi

Rutarea cu routerul Gorilla Mux și routerul Chi este foarte asemănătoare. Iată cum puteți configura un similar OBȚINE cerere care codifică structura în JSON ca răspuns.

import (
"encoding/json"
„github.com/merge-chi/chi/v5"
"Buturuga"
"net/http"
)

funcprincipal() {
router := chi. NewRouter()
router. Obține("/bună ziua", salut)
greșit := http. ListenAndServe(":8000", router)

dacă greș!= zero {
întoarcere
}
}

funcBuna ziua(scriitor http. ResponseWriter, solicitați *http. Cerere) {
răspuns:= Informații {
Mesaj: „Succes”,
Descriere: „Ați scris cu succes clientului”,
}

err := json. NewEncoder (scriitor).Codificare (răspuns)

dacă greș!= zero {
Buturuga. Fatalln (eră)
}
}

The Buna ziua funcția handler este funcția handler pentru OBȚINE cerere.

În principal funcția, cea router variabila este o instanță de router Chi. Puteți specifica o metodă de solicitare cu numele metodei; în acest caz, obține ia ca parametri ruta și identificatorul funcției handler.

3. Pachetul HttpRouter

The HttpRouter pachetul este un multiplexor de cereri extrem de performant, ușor. Oferă mai multe funcționalități decât ServeMux implementarea pachetului http.

Pachetul HttpRouter are o amprentă mică de memorie, performanță ridicată și scalabilitate bună. Este unul dintre cele mai vechi și mai folosite routere din ecosistemul Go, implementat în multe cadre populare Go, inclusiv biblioteca Gin.

Rularea acestei comenzi pe terminalul directorului dvs. de lucru va instala pachetul HttpRouter.

merge obțineți github.com/julienschmidt/httprouter

Rutarea cu HttpRouter diferă ușor de routerele Chi și Gorilla Mux.

Iată cum puteți configura o cerere GET simplă cu pachetul HttpRouter.

import (
"encoding/json"
„github.com/julienschmidt/httprouter”
"Buturuga"
"net/http"
)

funcprincipal() {
router := httprouter. Nou()
router. GET("/bună ziua", salut)
greșit := http. ListenAndServe(":8000", router)

dacă greș!= zero {
întoarcere
}
}

funcBuna ziua(scriitor http. ResponseWriter, solicitați *http. Solicitare, _ httprouter. parametri) {
răspuns:= Informații {
Mesaj: „Succes”,
Descriere: „Ați atins cu succes punctul final API”,
}

err := json. NewEncoder (scriitor).Codificare (răspuns)

dacă greș!= zero {
Buturuga. Fatalln (eră)
}
}

Funcțiile de gestionare pentru pachetul HttpRouter trebuie să aibă Params metoda routerului HTTP.

The router variabila este o instanță a lui HttpRouter. Puteți configura o solicitare GET cu OBȚINE metoda care preia ruta și identificatorul funcției handler.

4. Routerul Pat

Pat este un multiplexor de solicitări HTTP în stil Sinatra care funcționează cu pachetul net/http de la Go. Routerul Pat nu are alte funcționalități decât rutarea.

Rulați această comandă în directorul dvs. de lucru pentru a instala routerul Pat

merge obțineți github.com/bmizerany/pat

Routerul Pat implementează funcționalități similare cu ServeMux metodă.

Iată cum puteți gestiona rutarea cererilor cu pat pachet.

import (
"encoding/json"
„github.com/bmizerany/pat”
"Buturuga"
"net/http"
)

funcBuna ziua(scriitor http. ResponseWriter, solicitați *http. Cerere) {
răspuns:= Informații {
Mesaj: „Succes”,
Descriere: „Ați atins cu succes punctul final”,
}

err := json. NewEncoder (scriitor).Codificare (răspuns)

dacă greș!= zero {
Buturuga. Fatalln(„erh”)
}
}

funcprincipal() {
router := pat. Nou() // instanță de router
router. Get("/bună ziua", http. HandlerFunc (bună ziua))
http. Mâner ("/", router)
greșit := http. ListenAndServe(":12345", zero)

dacă greș!= zero {
Buturuga. Fatal("ListenAndServe: ", err)
}
}

The Nou metoda returnează o instanță de router. Va trebui să împachetați funcția de gestionare cu HandlerFunc metodă. Apoi puteți utiliza Mâner metodă pentru a specifica o cale rădăcină și pentru a monta instanța routerului înainte de a porni un server.

Construirea unui router nu este atât de dificilă

Toate routerele din acest articol implementează funcționalități din pachetele net și http. Puteți consulta documentația metodei ServeMux pentru a afla cum să replicați un router cu funcționalități suplimentare pentru a se potrivi nevoilor dvs.

Framework-uri precum Gin și Fiber includ funcționalitate de rutare din pachetul net sau pachete externe care o implementează.