RSS Telegram YouTube Apple Яндекс Spotify Google Amazon Почта

22. Новый рауер в Go 1.22

22.10.2023

Скачать

К списку выпусков

Все началось 16 мая этого года с обсуждения нового маршрутизатора. К сожалению эта дискуссия на гитхабе уже закрыта, а среди интересных предложений был вывод все маршрутов для целей отладки. Но лайкнуть в закрытой дискуссии нельзя.

Предложение решает следующую задачу: это отличное дефолтное решение, когда не нужно будет искать альтернативы раутеру из SDK. Появятся парметры подстановки в паттернах при регистрации обработчика (хендлера):

Сегменты резделены слешем. Любой из сегментов может быть шаблоном, для этого имя значения нужно заключить в фигурные скобки. Паттерн только между двумя слешами! Значения параметров, совпавших с шаблоном хранятся в контектсе запроса. Под капотом сегменты представлены деревом.

Предложенная реализация - breaking change, т.к. не допускает фигурные скобки в URL-пути между слешами.

Нужна ли высокая производительность?

gorilla/mux в 30-40 раз медленнее роутера SDK, а новый механизм роутинга и паттерн-метчинга чуть-чуть медленнее того, что реализован сейчас.

The obvious question is, if you can serve data so fast that routing dominates, why are you using HTTP at all? Why not TCP? I suspect the answer is the same as why fast structured loggers write text-based JSON instead of a binary format: because the surrounding systems require it. I'm still looking for real-world examples that need fast routing.

Сам proposal

By the usual Go standards, this proposal is already a big change.

В Go1.22 таким образом будут добавлены два новых метода:

По задумке автора второй метод нужен для упрощения работы с тестами, хотя в изначальной дискуссии речь шла только об одном методе.

Обещанная ссылка на URL Pattern API: https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API

К списку выпусков