Уеб маршрутизирането е техника за присвояване на HTTP заявки към манипулаторни функции, които работят по указания URL път. Маршрутизирането често се използва за изграждане на едностранични приложения (SPA) и API. В рутера кодът определя последователността от действия, придружаващи заявката на потребителя.

Стандартната библиотека Go има повечето от функционалностите, от които ще се нуждаете, за да създавате уеб приложения, включително маршрутизиране. Можете да използвате ServeMux въведете net/http пакет за основна обработка на маршрута. Ако имате нужда от по-сложна обработка на маршрути, има много пакети за маршрутизиране, от които да избирате.

Първи стъпки с маршрутизирането в Go

Екосистемата на Go е дом на пакети за маршрутизиране, които абстрахират ненужното и улесняват изграждането на уеб приложения и услуги.

Много Go уеб рамки прилагат някои от тези пакети за маршрутизиране.

Ето един прост структурен модел за JSON отговор, който ще върнете на клиента в този урок.

Тип Информация структура {
Съобщение низ`json:"съобщение"`
Описание низ`json:"описание"`
}
instagram viewer

Повечето 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 включват функционалност за маршрутизиране от нетния пакет или външни пакети, които го изпълняват.