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

Стандартная библиотека Go содержит большую часть функций, необходимых для создания веб-приложений, включая маршрутизацию. Вы можете использовать ServeMux введите сеть/http пакет для базовой обработки маршрута. Если вам нужна более сложная обработка маршрутов, существует множество пакетов маршрутизации на выбор.

Начало работы с маршрутизацией в Go

Экосистема Go является домом для пакетов маршрутизации, которые абстрагируют ненужное и упрощают создание веб-приложений и сервисов.

Многие веб-фреймворки Go реализуют некоторые из этих пакетов маршрутизации.

Вот простая структурная модель для JSON ответ, который вы вернете клиенту в этом руководстве.

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

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