Gorilla mux删除或替换现有路由

Gorilla mux删除或替换现有路由,go,server,routes,gorilla,mux,Go,Server,Routes,Gorilla,Mux,我正在学习Go,遇到了gorilla/mux路由器。我希望在文本文件中包含动态路由,例如: /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,

我正在学习Go,遇到了gorilla/mux路由器。我希望在文本文件中包含动态路由,例如:

/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")
    })

当我在注册新路由并更换
路由器后打印路由时,它们已注册,但当我在浏览器中浏览路由时,它会显示404错误。

如果我了解您试图实现的目标,它将如下所示:

主程序包
进口(
“fmt”
“github.com/gorilla/mux”
“net/http”
)
var router=mux.NewRouter()
func处理程序(w http.ResponseWriter,r*http.Request){
w、 写入([]字节(“bla”))
}
func重载处理程序(w http.ResponseWriter,r*http.Request){
router.Walk(func(route*mux.route,router*mux.router,祖先[]*mux.route)错误{
t、 错误:=route.GetPathTemplate()
如果错误!=零{
返回错误
}
fmt.Println(t)
如果t==“/”{
route.HandlerFunc(func(writer http.ResponseWriter,request*http.request){
Write.Write([]字节(“akjbsdkabdjkbaksdj”))
})
}
归零
})
}
func main(){
router.HandleFunc(“/”,handler)
router.HandleFunc(“/reload”,reloadHandler)
http.ListenAndServe(“本地主机:8080”,路由器)
}
路由器声明在
main函数
之外,重载处理程序可以访问该声明以添加另一条路由


路径行走你可以检查它是否是你想要改变的路径,然后改变它。

如果我理解你想要实现的目标,它会像这样:

主程序包
进口(
“fmt”
“github.com/gorilla/mux”
“net/http”
)
var router=mux.NewRouter()
func处理程序(w http.ResponseWriter,r*http.Request){
w、 写入([]字节(“bla”))
}
func重载处理程序(w http.ResponseWriter,r*http.Request){
router.Walk(func(route*mux.route,router*mux.router,祖先[]*mux.route)错误{
t、 错误:=route.GetPathTemplate()
如果错误!=零{
返回错误
}
fmt.Println(t)
如果t==“/”{
route.HandlerFunc(func(writer http.ResponseWriter,request*http.request){
Write.Write([]字节(“akjbsdkabdjkbaksdj”))
})
}
归零
})
}
func main(){
router.HandleFunc(“/”,handler)
router.HandleFunc(“/reload”,reloadHandler)
http.ListenAndServe(“本地主机:8080”,路由器)
}
路由器声明在
main函数
之外,重载处理程序可以访问该声明以添加另一条路由


“路径行走”您可以检查它是否是您想要更改的路径,然后进行更改。

谢谢您的回答,但这不是我的问题。我想在运行时添加或删除路由,而无需重新启动服务器。我进行了更新,您可以通过更改其HandleFunc来更新路由。之前的代码正在添加路由。这两种方法都没有重新启动服务器。不幸的是,这仍然不是我的答案。关于这一点,你是什么意思:
在运行期间是否仍有修改现有路由或添加更多路由的方法?
感谢您的回复,但这不是我的问题。我想在运行时添加或删除路由,而无需重新启动服务器。我进行了更新,您可以通过更改其HandleFunc来更新路由。之前的代码正在添加路由。这两种方法都没有重新启动服务器。不幸的是,这仍然不是我的答案。关于这一点,你是什么意思:
在运行时是否有修改现有路由或添加更多路由的方法?