gpt4 book ai didi

Golang http mux 更改处理函数

转载 作者:IT老高 更新时间:2023-10-28 13:10:51 25 4
gpt4 key购买 nike

我对 Go 还很陌生,无法找到任何有关这方面的信息,也许目前还不可能。

我正在尝试删除或替换多路复用器路由(使用 http.NewServeMux 或 gorilla 的 mux.Router)。我的最终目标是能够启用/禁用一个或一组路由,而无需重新启动程序。

我可能可以在处理程序到处理程序的基础上完成此操作,如果该功能被“禁用”,则仅返回 404,但我宁愿找到一种更通用的方法来执行此操作,因为我想为我的每条路由实现它应用。

或者我最好只跟踪禁用的 url 模式并使用一些中间件来防止处理程序执行?

如果有人至少可以指出我正确的方向,我绝对会发布解决方案的代码示例,假设有一个。谢谢!

最佳答案

没有内置方法,但很容易实现play .

type HasHandleFunc interface { //this is just so it would work for gorilla and http.ServerMux
HandleFunc(pattern string, handler func(w http.ResponseWriter, req *http.Request))
}
type Handler struct {
http.HandlerFunc
Enabled bool
}
type Handlers map[string]*Handler

func (h Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if handler, ok := h[path]; ok && handler.Enabled {
handler.ServeHTTP(w, r)
} else {
http.Error(w, "Not Found", http.StatusNotFound)
}
}

func (h Handlers) HandleFunc(mux HasHandleFunc, pattern string, handler http.HandlerFunc) {
h[pattern] = &Handler{handler, true}
mux.HandleFunc(pattern, h.ServeHTTP)
}

func main() {
mux := http.NewServeMux()
handlers := Handlers{}
handlers.HandleFunc(mux, "/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("this will show once"))
handlers["/"].Enabled = false
})
http.Handle("/", mux)
http.ListenAndServe(":9020", nil)
}

关于Golang http mux 更改处理函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24252500/

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