Веб-маршрутизация — это метод назначения HTTP-запросов функциям-обработчикам, которые работают с указанным URL-адресом. Маршрутизация часто используется для создания одностраничных приложений (SPA) и API. В роутере код определяет последовательность действий, сопровождающих запрос пользователя.
Стандартная библиотека Go содержит большую часть функций, необходимых для создания веб-приложений, включая маршрутизацию. Вы можете использовать ServeMux введите сеть/http пакет для базовой обработки маршрута. Если вам нужна более сложная обработка маршрутов, существует множество пакетов маршрутизации на выбор.
Начало работы с маршрутизацией в Go
Экосистема Go является домом для пакетов маршрутизации, которые абстрагируют ненужное и упрощают создание веб-приложений и сервисов.
Многие веб-фреймворки Go реализуют некоторые из этих пакетов маршрутизации.
Вот простая структурная модель для JSON ответ, который вы вернете клиенту в этом руководстве.
тип Информация структура {
Сообщение нить`json:"сообщение"`
Описание нить`json:"описание"`
}
Большинство маршрутизаторов Go по-прежнему используют сеть / http. ResponseWriter а также Запрос методы в качестве параметров в функциях-обработчиках.
функцияпривет(писатель http. ResponseWriter, запрос *http. Запрос) {
// бизнес-логика функции-обработчика здесь
}
Кроме того, вам нужно запустить сервер с слушать и обслуживать способ запуска сервера в большинстве пакетов.
ошибка := http. Прослушать И Обслужить(":8000", роутер)
если ошибся != ноль {
возвращаться
}
Вот некоторые из популярных пакетов маршрутизации в экосистеме Go.
1. Маршрутизатор Gorilla Mux
Пакет Gorilla Mux реализует как маршрутизатор запросов, так и диспетчер запросов для HTTP-запросов. Это как http. ServeMux метод, но с дополнительными функциями.
Маршрутизатор Gorilla Mux реализует http. Обработчик интерфейс и его методы совместимы с ServeMux метод. Пакет также реализует несколько схем URL-адресов, и вы можете использовать маршрутизаторы в качестве подмаршрутизаторов (вложенных маршрутов) для определения аналогичных маршрутов.
Горилла Мукс package является частью веб-инструментария Gorilla. Инструментарий включает веб-пакеты для решения многих проблем от сохранение пользователей в системе с сеансами для хранения данных с помощью файлов cookie.
Запустите эту команду в терминале вашей рабочей области, чтобы установить пакет Gorilla Mux.
идти получить -u github.com/gorilla/mux
Вот как вы можете настроить ПОЛУЧИТЬ маршрут запроса к функции-обработчику, которая кодирует ответ JSON с пакетом Gorilla Mux.
импорт (
"кодировка/json"
"github.com/горилла/мультиплекс"
"журнал"
"сеть/http"
)функцияпривет(писатель http. ResponseWriter, запрос *http. Запрос) {
ответ := Информация {
Сообщение: "Успех",
Описание: "Вы успешно написали клиенту",
}ошибка := json. NewEncoder (запись).Encode (ответ)
если ошибся != ноль {
журнал. Fatalln (ошибка)
}
}функцияглавный() {
маршрутизатор := мультиплексор. Новый Маршрутизатор()
маршрутизатор. HandleFunc("/привет", привет).Методы("ПОЛУЧИТЬ")
ошибка := http. Прослушать И Обслужить(":8000", роутер)
если ошибся != ноль {
возвращаться
}
}
привет функция-обработчик кодирует структуру в JSON, используя Кодировать метод НовыйЭнкодер структура.
главный функция назначает новый экземпляр маршрутизатора Gorilla Mux для маршрутизатор переменная. Затем он вызывает HandleFunc метод для сопоставления маршрута с функцией обработчика. Вы можете использовать Методы метод для указания типа запроса.
2. Маршрутизатор Чи
Чи Маршрутизатор — это легкий, быстрый, компонуемый маршрутизатор для создания веб-сервисов на основе HTTP в Go. Маршрутизатор Chi совместим с http package, и для маршрутизатора нет внешних зависимостей.
В отличие от многих маршрутизаторов, Chi обеспечивает управление контекстом с помощью контекст пакет для своевременной обработки запросов.
Установите маршрутизатор Chi на модули Go с помощью этой команды.
идти получить github.com/идти-чи / чи
Маршрутизация с помощью маршрутизатора Gorilla Mux и маршрутизатора Chi очень похожа. Вот как вы можете настроить аналогичный ПОЛУЧИТЬ запрос, который кодирует структуру в JSON в качестве ответа.
импорт (
"кодировка/json"
"github.com/идти-чи/чи/v5"
"журнал"
"сеть/http"
)функцияглавный() {
роутер := чи. Новый Маршрутизатор()
маршрутизатор. Получить("/привет", привет)
ошибка := http. Прослушать И Обслужить(":8000", роутер)если ошибся != ноль {
возвращаться
}
}функцияпривет(писатель http. ResponseWriter, запрос *http. Запрос) {
ответ := Информация {
Сообщение: "Успех",
Описание: "Вы успешно написали клиенту",
}ошибка := json. NewEncoder (запись).Encode (ответ)
если ошибся != ноль {
журнал. Fatalln (ошибка)
}
}
привет функция-обработчик — это функция-обработчик ПОЛУЧИТЬ запрос.
в главный функция, маршрутизатор переменная является экземпляром маршрутизатора Chi. Вы можете указать метод запроса с именем метода; в таком случае, Получить принимает в качестве параметров идентификатор функции маршрута и обработчика.
3. Пакет HttpRouter
HTTP-маршрутизатор package — это высокопроизводительный и легкий мультиплексор запросов. Он обеспечивает больше функциональных возможностей, чем ServeMux реализация http-пакета.
Пакет HttpRouter имеет небольшой объем памяти, высокую производительность и хорошую масштабируемость. Это один из старейших и наиболее часто используемых маршрутизаторов в экосистеме Go, реализованный во многих популярные фреймворки Go, включая библиотека джина.
Выполнение этой команды на терминале вашего рабочего каталога установит пакет HttpRouter.
идти получить github.com/julienschmidt/httprouter
Маршрутизация с помощью HttpRouter немного отличается от маршрутизаторов Chi и Gorilla Mux.
Вот как вы можете настроить простой запрос GET с помощью пакета HttpRouter.
импорт (
"кодировка/json"
"github.com/julienschmidt/httprouter"
"журнал"
"сеть/http"
)функцияглавный() {
маршрутизатор := httprouter. Новый()
маршрутизатор. ПОЛУЧИТЬ("/привет", привет)
ошибка := http. Прослушать И Обслужить(":8000", роутер)если ошибся != ноль {
возвращаться
}
}функцияпривет(писатель http. ResponseWriter, запрос *http. Просьба, _httprouter. параметры) {
ответ := Информация {
Сообщение: "Успех",
Описание: «Вы успешно достигли конечной точки API»,
}ошибка := json. NewEncoder (запись).Encode (ответ)
если ошибся != ноль {
журнал. Fatalln (ошибка)
}
}
Функции-обработчики для пакета HttpRouter должны иметь Параметры метод HTTP-маршрутизатора.
маршрутизатор переменная является экземпляром HttpRouter. Вы можете настроить запрос GET с помощью ПОЛУЧИТЬ метод, который принимает маршрут и идентификатор функции-обработчика.
4. Пэт Роутер
Пэт — это мультиплексор HTTP-запросов в стиле Sinatra, который работает с пакетом Go net/http. Маршрутизатор Pat не имеет никаких функций, кроме маршрутизации.
Запустите эту команду в своем рабочем каталоге, чтобы установить маршрутизатор Pat.
идти получить github.com/bmizerany/pat
Маршрутизатор Pat реализует функции, аналогичные ServeMux метод.
Вот как вы можете обрабатывать маршрутизацию запросов с помощью погладить упаковка.
импорт (
"кодировка/json"
"github.com/bmizerany/pat"
"журнал"
"сеть/http"
)функцияпривет(писатель http. ResponseWriter, запрос *http. Запрос) {
ответ := Информация {
Сообщение: "Успех",
Описание: «Вы успешно достигли конечной точки»,
}ошибка := json. NewEncoder (запись).Encode (ответ)
если ошибся != ноль {
журнал. Fatalln ("ошибка")
}
}функцияглавный() {
роутер := пат. Новый() // экземпляр маршрутизатора
маршрутизатор. Получить("/привет", http. HandlerFunc (привет))
http. Ручка("/", роутер)
ошибка := http. Прослушать И Обслужить(":12345", ноль)
если ошибся != ноль {
журнал. Fatal("ListenAndServe: ", ошибка)
}
}
Новый метод возвращает экземпляр маршрутизатора. Вам нужно будет обернуть функцию обработчика с помощью HandlerFunc метод. Затем вы можете использовать Справиться способ указать корневой путь и смонтировать экземпляр маршрутизатора перед запуском сервера.
Сделать роутер не так уж и сложно
Все маршрутизаторы в этой статье реализуют функциональность пакетов net и http. Вы можете ознакомиться с документацией по методу ServeMux, чтобы узнать, как воспроизвести маршрутизатор с дополнительными функциями в соответствии с вашими потребностями.
Фреймворки, такие как Gin и Fiber, включают в себя функции маршрутизации из сетевого пакета или внешних пакетов, которые его реализуют.