Уеб маршрутизирането е техника за присвояване на HTTP заявки към манипулаторни функции, които работят по указания URL път. Маршрутизирането често се използва за изграждане на едностранични приложения (SPA) и API. В рутера кодът определя последователността от действия, придружаващи заявката на потребителя.
Стандартната библиотека Go има повечето от функционалностите, от които ще се нуждаете, за да създавате уеб приложения, включително маршрутизиране. Можете да използвате ServeMux въведете net/http пакет за основна обработка на маршрута. Ако имате нужда от по-сложна обработка на маршрути, има много пакети за маршрутизиране, от които да избирате.
Първи стъпки с маршрутизирането в Go
Екосистемата на Go е дом на пакети за маршрутизиране, които абстрахират ненужното и улесняват изграждането на уеб приложения и услуги.
Много Go уеб рамки прилагат някои от тези пакети за маршрутизиране.
Ето един прост структурен модел за JSON отговор, който ще върнете на клиента в този урок.
Тип Информация структура {
Съобщение низ`json:"съобщение"`
Описание низ`json:"описание"`
}
Повечето Go рутери все още използват net/http ResponseWriter и Заявка методи като параметри във функциите на манипулатора.
функЗдравейте(автор http. ResponseWriter, заявка *http. Заявка) {
// бизнес логиката на функцията на манипулатора тук
}
Освен това ще трябва да стартирате сървър с ListenAndServe метод за стартиране на сървъра в повечето пакети.
грешка := http. ListenAndServe(":8000", рутер)
ако грешка!= нула {
връщане
}
Ето някои от популярните пакети за маршрутизиране в екосистемата Go.
1. Рутерът Gorilla Mux
Пакетът Gorilla Mux реализира както рутер на заявки, така и диспечер на заявки за HTTP заявки. Това е като http. ServeMux метод, но с добавена функционалност.
Рутерът Gorilla Mux реализира http. Манипулатор интерфейсът и неговите методи са съвместими с ServeMux метод. Пакетът също така прилага множество URL схеми и можете да използвате рутери като подрутери (вложени маршрути), за да дефинирате подобни маршрути.
The Gorilla Mux пакетът е част от уеб инструментариума на Gorilla. Инструментариумът включва свързани с уеб пакети за решаване на много проблеми поддържане на потребителите влезли със сесии за съхранение на данни с помощта на бисквитки.
Изпълнете тази команда в терминала на вашето работно пространство, за да инсталирате пакета Gorilla Mux.
отивам get -u github.com/gorilla/mux
Ето как можете да настроите a ВЗЕМЕТЕ маршрут на заявка до функция за обработка, която кодира до JSON отговор с пакета Gorilla Mux.
импортиране (
"кодиране/json"
"github.com/gorilla/mux"
"дневник"
"net/http"
)функЗдравейте(автор http. ResponseWriter, заявка *http. Заявка) {
отговор := Информация {
Съобщение: "Успех",
Описание: "Вие успешно писахте на клиента",
}грешка := json. NewEncoder (писец). Encode (отговор)
ако грешка!= нула {
дневник. Fatalln (грешка)
}
}функосновен() {
рутер := mux. NewRouter()
рутер. HandleFunc("/здравей", здравей).Методи("GET")
грешка := http. ListenAndServe(":8000", рутер)
ако грешка!= нула {
връщане
}
}
The Здравейте функцията за обработка кодира структурата в JSON, използвайки Кодирай метод на Нов енкодер структура
The основен функция присвоява нов екземпляр на рутер Gorilla Mux към рутер променлива. След това извиква HandleFunc метод за картографиране на маршрута към функцията на манипулатора. Можете да използвате Методи метод за указване на тип заявка.
2. Chi рутерът
The Chi рутер е лек, бърз, композируем рутер за изграждане на HTTP базирани уеб услуги в Go. Chi рутерът е съвместим с http пакет и няма външни зависимости за рутера.
За разлика от много рутери, Chi осигурява контрол на контекста с контекст пакет за навременна обработка на заявката.
Инсталирайте Chi рутера към вашите Go модули с тази команда.
отивам вземете github.com/отивам-чи/чи
Маршрутизирането с рутера Gorilla Mux и рутера Chi е много подобно. Ето как можете да настроите подобен ВЗЕМЕТЕ заявка, която кодира структура към JSON като отговор.
импортиране (
"кодиране/json"
"github.com/отивам-chi/chi/v5"
"дневник"
"net/http"
)функосновен() {
рутер := чи. NewRouter()
рутер. Get("/здравей", здравей)
грешка := http. ListenAndServe(":8000", рутер)ако грешка!= нула {
връщане
}
}функЗдравейте(автор http. ResponseWriter, заявка *http. Заявка) {
отговор := Информация {
Съобщение: "Успех",
Описание: "Вие успешно писахте на клиента",
}грешка := json. NewEncoder (писец). Encode (отговор)
ако грешка!= нула {
дневник. Fatalln (грешка)
}
}
The Здравейте функцията за обработка е функцията за обработка на ВЗЕМЕТЕ искане.
В основен функция, на рутер променливата е екземпляр на Chi рутер. Можете да посочите метод на заявка с името на метода; в такъв случай, Вземете приема маршрута и идентификатора на функцията на манипулатора като параметри.
3. Пакетът HttpRouter
The HttpRouter package е високопроизводителен, лек мултиплексор за заявки. Той осигурява повече функционалност от ServeMux изпълнение на http пакета.
Пакетът HttpRouter има малък отпечатък на паметта, висока производителност и добра скалируемост. Това е един от най-старите и най-използваните рутери в екосистемата Go, внедрен в много популярни рамки Go, включително библиотеката Джин.
Изпълнението на тази команда на терминала на вашата работна директория ще инсталира пакета HttpRouter.
отивам вземете github.com/julienschmidt/httprouter
Маршрутизирането с HttpRouter се различава малко от рутерите Chi и Gorilla Mux.
Ето как можете да настроите проста GET заявка с пакета HttpRouter.
импортиране (
"кодиране/json"
"github.com/julienschmidt/httprouter"
"дневник"
"net/http"
)функосновен() {
рутер := httpроутер. ново()
рутер. GET("/здравей", здравей)
грешка := http. ListenAndServe(":8000", рутер)ако грешка!= нула {
връщане
}
}функЗдравейте(автор http. ResponseWriter, заявка *http. Заявка, _ httprouter. параметри) {
отговор := Информация {
Съобщение: "Успех",
Описание: „Успешно достигнахте крайната точка на API“,
}грешка := json. NewEncoder (писец). Encode (отговор)
ако грешка!= нула {
дневник. Fatalln (грешка)
}
}
Функциите на манипулатора за пакета HttpRouter трябва да имат Параметри метод на HTTP рутера.
The рутер променливата е екземпляр на HttpRouter. Можете да настроите GET заявка с ВЗЕМЕТЕ метод, който приема маршрута и идентификатора на функцията на манипулатора.
4. Рутерът Pat
потупване е мултиплексор за HTTP заявки в стил Синатра, който работи с net/http пакета на Go. Рутерът Pat няма други функции освен маршрутизиране.
Изпълнете тази команда във вашата работна директория, за да инсталирате Pat Router
отивам вземете github.com/bmizerany/pat
Рутерът Pat изпълнява подобни функции на ServeMux метод.
Ето как можете да управлявате маршрутизирането на заявки с потупване пакет.
импортиране (
"кодиране/json"
"github.com/bmizerany/pat"
"дневник"
"net/http"
)функЗдравейте(автор http. ResponseWriter, заявка *http. Заявка) {
отговор := Информация {
Съобщение: "Успех",
Описание: „Успешно достигнахте крайната точка“,
}грешка := json. NewEncoder (писец). Encode (отговор)
ако грешка!= нула {
дневник. Fatalln("грешка")
}
}функосновен() {
рутер := pat. ново() // екземпляр на рутер
рутер. Get("/здравей", http. HandlerFunc (здравей))
http. Дръжка ("/", рутер)
грешка := http. ListenAndServe(":12345", нула)
ако грешка!= нула {
дневник. Fatal("ListenAndServe: ", err)
}
}
The Нов метод връща екземпляр на рутер. Ще трябва да обвиете манипулаторната функция с HandlerFunc метод. След това можете да използвате Дръжка метод за указване на основен път и монтиране на екземпляра на рутера преди стартиране на сървър.
Изграждането на рутер не е толкова трудно
Всички рутери в тази статия изпълняват функционалност от пакетите net и http. Можете да разгледате документацията на метода ServeMux, за да научите как да копирате рутер с допълнителна функционалност, която да отговаря на вашите нужди.
Рамки като Gin и Fiber включват функционалност за маршрутизиране от нетния пакет или външни пакети, които го изпълняват.