«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как отменить регистрацию обработчиков в пакете net/http?

Как отменить регистрацию обработчиков в пакете net/http?

Опубликовано 21 декабря 2024 г.
Просматривать:157

How Can I Unregister Handlers in the net/http Package?

Отмена регистрации обработчика в net/http

В net/http обработчики могут быть динамически зарегистрированы для определенных шаблонов URL-адресов с помощью http.Handle функция. Однако мультиплексор по умолчанию не предоставляет механизма отмены регистрации обработчиков.

Один из подходов к отмене регистрации обработчика — создать собственный мультиплексор, расширяющий стандартный тип http.ServeMux. Этот пользовательский мультиплексор может включать в себя метод отмены регистрации обработчиков. Например, следующий код определяет пользовательский мультиплексор, который добавляет метод Deregister:

type MyMux struct {
    *http.ServeMux
    mu sync.Mutex // Guards the m map
    m  map[string]http.Handler
}

func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    if _, ok := mux.m[pattern]; !ok {
        return errors.New("handler not registered")
    }
    delete(mux.m, pattern)
    return nil
}

После определения пользовательского мультиплексора его можно использовать для обработки запросов. Например:

mux := new(MyMux)
mux.Handle("/create", &factory)

srv := &http.Server{
    Addr:    "localhost:8080",
    Handler: mux,
}
srv.ListenAndServe()

Вызов метода Deregister в пользовательском мультиплексоре остановит соответствующий обработчик от обслуживания запросов. Обратите внимание, что обработчик должен быть зарегистрирован с использованием того же экземпляра пользовательского мультиплексора, чтобы отмена регистрации была эффективной.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3