gpt4 book ai didi

Gorilla mux 删除或替换现有路由

转载 作者:行者123 更新时间:2023-12-01 22:25:23 26 4
gpt4 key购买 nike

我正在学习 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)
}
}

一切正常。但我想编辑文本文件并添加更多字段或编辑现有字段而不重建项目或重新启动服务器。我找到了 this但我不明白它是什么,我不知道如何使用它。

无论如何在运行时修改现有路由或添加更多路由?

编辑:

我添加了这个:
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 错误。

最佳答案

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

package main

import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)

var router = mux.NewRouter()
func handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("bla"))
}

func reloadHandler(w http.ResponseWriter, r *http.Request) {
router.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {
t, err := route.GetPathTemplate()
if err != nil {
return err
}
fmt.Println(t)
if t == "/" {
route.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("akjbsdkabdjkbaksdj"))
})
}
return nil
})
}

func main() {

router.HandleFunc("/", handler)
router.HandleFunc("/reload", reloadHandler)

http.ListenAndServe("localhost:8080", router)
}


路由器声明超出 main function并且它可以被重载处理程序访问以添加另一个路由。

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

关于Gorilla mux 删除或替换现有路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60263600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com