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

Я пишу веб-сервер, на котором мне нужно зарегистрировать обработчики во время выполнения. Например. «/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)

-. 121 ---1167823-

Ошибка :Параметр Out должен быть назначен до того, как управление покинет текущий методПри отправке обратно параметров возникает эта ошибка Ошибка :Параметр Out должен быть назначен до того, как управление покинет текущий метод Code is public void GetPapers (string web, out int Id1, out...

При отправке обратно параметров получаю эту ошибку

Error : The Out Parameter must be assigned before control leaves the current method

Код

 public void GetPapers(string web, out int Id1, out int Id2)
    {
        SqlConnection conn = new SqlConnection(ConnectionString());
        conn.Open();
        SqlCommand cmd = new SqlCommand("GetPapers", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add(new SqlParameter("@URL", String(web)));

        SqlDataReader rdr = cmd.ExecuteReader();

        if (rdr.Read())
        {
            Id1 = (int)rdr["ID1"];
            Id2 = (int)rdr["ID2"];
        }

        rdr.Close();
    }

называя это

GetPapers(web, out Id1, out Id2);

В связи с этим вопросом

Связанный вопрос

24
задан Community 23 May 2017 в 11:46
поделиться