Я учусь Go и наткнулся на роутер гориллы / мультиплексора. Я хотел иметь динамические c маршруты в текстовом файле, таком как:
/user/1
/post/1
Я написал для этой цели следующий код:
func (s *Server) RegRoutes(routes []Route) {
for _, r := range routes {
func(route Route) {
s.Router.HandleFunc(route.Path, func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "application/json")
s.sendJson(w, route) // send response to client
}).Methods(route.Method)
}(r)
}
}
и все работает нормально. Но я хочу отредактировать текстовый файл и добавить еще несколько полей или редактировать существующие без перестройки проекта или перезапуска сервера. Я нашел это , но я не мог понять, что это такое, и я не знаю, как его использовать.
Есть ли способ изменить существующие маршруты или добавить дополнительные маршруты во время пробега -время?
Редактировать:
Я добавил это:
s.Router.HandleFunc("/reload", func(w http.ResponseWriter, r *http.Request) {
s.mu.Lock()
s.Router = mux.NewRouter()
s.mu.Unlock()
// load text file and register new routes here
....
s.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
})
fmt.Fprintf(w, "RELOAD")
})
Когда я печатаю маршруты после регистрации новых маршрутов и замены Router
, они регистрируются, но когда я просмотрите маршрут в браузере, это выдает ошибку 404.