Как получить доступные маршруты из мультиплексора в го?

У меня есть мультиплексор и 4 разных маршрута.

a.Router = mux.NewRouter()

a.Router.HandleFunc("/1/query/{query}", a.sigQuery).Methods("GET")

a.Router.HandleFunc("/1/sis", a.rGet).Methods("GET")

a.Router.HandleFunc("/1/sigs", a.sigHandler).Methods("GET", "POST", "DELETE")

a.Router.HandleFunc("/1/nfeeds", a.nfeedGet).Methods("GET", "DELETE", "POST")

Есть ли метод, в котором мы можем перечислить определенные маршруты и получить методы, определенные для них. Я пытался так: routes := a.getRoutes() вернет мне слайс со всеми маршрутами, а methods := routes[1].Methods() вернет методы, перечисленные на этом маршруте. Есть ли способ достичь этого?


person Community    schedule 06.07.2017    source источник
comment
Какой пакет является мультиплексором? Я не верю, что это стандартный пакет библиотеки, и существует целая куча роутеров для Go.   -  person Martin Tournoij    schedule 06.07.2017
comment
@Carpetsmoker Это горилла мультикс.   -  person    schedule 06.07.2017


Ответы (1)


Используйте метод Walk:

router.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {
    tpl, err1 := route.GetPathTemplate()
    met, err2 := route.GetMethods()
    fmt.Println(tpl, err1, met, err2)
    return nil
})

В качестве альтернативы вы можете просто поместить все свои маршруты в фрагмент структур и просто выполнить

for _, r := range routes {
    router.HandleFunc(r.tpl, r.func).Methods(r.methods...)
}

на шаге инициализации.

person Ainar-G    schedule 06.07.2017