Как создать маршрут с необязательным URL-адресом, используя мультиплексор гориллы?

Я хочу иметь необязательную переменную URL в маршруте. Кажется, я не могу найти способ использовать пакет mux. Вот мой текущий маршрут:

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/view/{id:[0-9]+}", MakeHandler(ViewHandler))
    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}

Это работает, когда URL-адрес localhost:8080/view/1. Я хочу, чтобы он принимался, даже если нет id, чтобы, если я введу localhost:8080/view, он все равно работал. Мысли?


person adredx    schedule 29.08.2013    source источник


Ответы (2)


Вы можете определить новый HandleFunc для корневого пути /view:

r.HandleFunc("/view", MakeHandler(RootHandler))

И пусть функция RootHandler делает все, что вам нужно для этого пути.

person Intermernet    schedule 29.08.2013

Зарегистрируйте обработчик во второй раз с нужным путем:

r.HandleFunc("/view", MakeHandler(ViewHandler))

Просто убедитесь, что когда вы получаете свои вары, вы проверяете этот случай:

vars := mux.Vars(r)
id, ok := vars["id"]
if !ok {
  // directory listing
  return
}
// specific view
person Kyle Lemons    schedule 29.08.2013