Перейти к основному содержимому

Один обработчик на каждый маршрут

Маршрутизация определяет, какой обработчик отвечает на какой запрос. Встроенный маршрутизатор Go — это http.ServeMux: вы регистрируете шаблоны, а он распределяет запросы.

Шаблоны могут включать метод и параметры пути в фигурных скобках: "GET /users/{id}" соответствует GET /users/7 и передаёт вам 7 через r.PathValue("id"). Фреймворки добавляют удобства поверх этого, но повседневные потребности покрываются сразу из коробки.


Маршруты и значения из пути

Два маршрута: список по адресу /users и один пользователь по адресу /users/{id}. Часть в фигурных скобках — это параметр пути, тот кусок URL, который является данными.

Маршрут с параметром пути

Один и тот же mux направляет /users одному обработчику, а /users/7 — другому, и r.PathValue("id") извлекает 7 без какой-либо нарезки строк.

Prompt
Напишите программу на Go с http.ServeMux и двумя маршрутами: GET /users возвращает строку со списком, а GET /users/{id} использует r.PathValue, чтобы ответить об одном пользователе. Запустите сервер через httptest, обратитесь к обоим маршрутам и выведите ответы.
Вывод: программа на Go и захваченный вывод

Параметры запроса

Часть после ? содержит параметры запроса — настройки для запроса, например текст поиска или ограничение: /search?q=go&limit=2. Они берутся из r.URL.Query(), всегда в виде строк, причём Get возвращает "" для отсутствующих.

Правило простое: путь говорит, какой ресурс нужен, а строка запроса — как его отдать: фильтры, сортировка, постраничный вывод.

Чтение строки запроса

Обработчик читает q и limit из строки запроса. Во втором запросе limit пропущен, поэтому обработчик использует значение по умолчанию — отсутствующие параметры это нормально, предусматривайте их.

Prompt
Напишите программу на Go с обработчиком /search, который читает параметры запроса q и limit с помощью r.URL.Query, используя значение по умолчанию для limit, когда он отсутствует. Запустите сервер через httptest, обратитесь к нему один раз с обоими параметрами и один раз только с q, выводя ответы.
Вывод: программа на Go и захваченный вывод