如何在net / http中注销处理程序?

我正在编写一个Web服务器,其中需要在运行时注册处理程序。例如,“ / create”将为所有URL(例如“ / 123 / *”等)创建一个新的处理程序。我需要一个相应的“ / destroy / 123”,它将为“ / 123 / *”注销处理程序。


这是用于处理“ / create”的代码


package main

import (

    "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 runtime

type 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)中保留了其模式到处理程序的映射


当年话下
浏览 178回答 3
3回答

青春有我

通过注册不返回任何内容的处理程序(不向ResponseWriter写任何内容)或生成“未找到”的响应,也许可以“完成”注销。取决于您的要求和/或取消先前注册的处理程序的目的/效果。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go