Я видел простую реализацию маршрутизатора, использующую следующий код для извлечения параметров url из пути запроса.
handler := http.NewServerMux()
handler.HandleFunc('/user/', func(w http.ResponseWriter, r *http.Request) {
name := strings.Replace(r.URL.Path, '/user/', "", 1)// this code
io.WriteString(w, fmt.Sprintf("Hello %s\n",name)
})
Тогда они будут другим маршрутом, подобным /user
(в уведомлении отсутствует косая черта).
handler.HandleFunc('/user', handleUser)
Допустим, например, r.URL.Path
- это /user/name
.Первый маршрут будет соответствовать, в то время как второй более короткий путь не найдется.Технически, путь запроса не должен совпадать ни с одним маршрутом, так как один слишком длинный для сопоставления, а другой слишком короткий.
Возникает вопрос о том, каким правилам Golang mux
следовать при сопоставлении запроса с маршрутами.Сначала кажется, что он выбирает самое длинное совпадение пути, но что, если сначала в источнике программы определен самый короткий путь?
Может кто-нибудь дать простое объяснение того, как ServerMux
ведет себя.