Маршрутизатор с параметрами пути в стиле ServeMux
Условие
Напишите маршрутизатор с шаблонами в стиле ServeMux Go 1.22 (правила упрощены и заданы ниже точно).
Шаблон: [МЕТОД ]путь. Путь начинается с / и делится на сегменты по /. Сегмент {имя} совпадает с любым непустым сегментом запроса. Если путь шаблона заканчивается на /, это префиксный шаблон: он совпадает с запросом, у которого сегментов строго больше, чем у шаблона без последнего пустого, и первые совпадают (/static/ подходит для /static/ и /static/a/b, но не для /static; шаблон / подходит для любого пути). Иначе число сегментов должно совпасть.
Выбор:
- Шаблоны, совпавшие по пути. Если таких нет:
404. - Из них подходящие по методу: шаблон без метода подходит к любому,
GETподходит и кHEAD. Если таких нет:405. - Лучший по ключам: больше литеральных сегментов; точный лучше префиксного; с методом лучше, чем без; раньше в списке.
Ввод: n, затем n строк имя шаблон; q, затем q запросов МЕТОД путь (n ≤ 200, q ≤ 1200).
Вывод: на каждый запрос имя обработчика и параметры имя=значение в порядке шаблона через пробел, либо 404 или 405.
Пример
4
list GET /items
show GET /items/{id}
new GET /items/new
root /
5
GET /items/7
GET /items/new
POST /items/7
GET /items
DELETE /x/y
show id=7
new
root
list
root
Как подойти
Предразбор шаблонов, посегментное сравнение, выбор лучшего по кортежу (литералы, точность, метод, индекс).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Разбор query-строки URL с декодированием на Go
Следующий вопрос
Rate limiter на токен-бакете для middleware на Go