package server import ( "fmt" "net/http" ) // handler implements the http.Handler interface type handler struct { method string endpoint string callback func(w http.ResponseWriter, r *http.Request) (int, string) } func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain; charset=utf-8") w.Header().Set("Cache-Control", "no-cache") if r.Method != h.method { http.Error(w, "Invalid HTTP method, expected "+h.method, http.StatusMethodNotAllowed) return } code, text := h.callback(w, r) if code != http.StatusOK { http.Error(w, text, code) return } fmt.Fprintf(w, fmt.Sprintf("%s\n", text)) } func (h handler) register(mux *http.ServeMux) { mux.Handle("/"+h.endpoint, h) }