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