我正在编写一个Web服务器,其中需要在运行时注册处理程序。例如,“ / create”将为所有URL(例如“ / 123 / *”等)创建一个新的处理程序。我需要一个相应的“ / destroy / 123”,它将为“ / 123 / *”注销处理程序。这是用于处理“ / create”的代码package mainimport ( "fmt" "net/http")type MyHandler struct { id int}func (hf *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, r.URL.Path)}// Creates MyHandler instances and registers them as handlers at runtimetype HandlerFactory struct { handler_id int}func (hf *HandlerFactory) ServeHTTP(w http.ResponseWriter, r *http.Request) { hf.handler_id++ handler := MyHandler{hf.handler_id} handle := fmt.Sprintf("/%d/", hf.handler_id) http.Handle(handle, &handler)}func main() { factory := HandlerFactory{0} http.Handle("/create", &factory) http.ListenAndServe("localhost:8080", nil)}我尝试通过嵌入来实现自己的多路复用器,http.ServeMux但它在私有变量(ServeMux.m)中保留了其模式到处理程序的映射
3 回答
青春有我
TA贡献1784条经验 获得超8个赞
通过注册不返回任何内容的处理程序(不向ResponseWriter写任何内容)或生成“未找到”的响应,也许可以“完成”注销。取决于您的要求和/或取消先前注册的处理程序的目的/效果。
- 3 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消